使用PyV8在Python中加载JavaScript库

2024-10-01 17:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用传单.js我的Python代码中的库。为了在代码中执行JS命令,我使用PyV8。但我无法装载传单.js库放入PyV8上下文中。当我这么做的时候

ctxt.eval(open("leaflet.js").read())

我得到了一个错误:

^{pr2}$

我甚至试图加载jquery库,然后才想到可能sleet依赖于它。但后来我发现了错误

TypeError: Cannot read property 'defaultView' of undefined (  @ 2 : 68 )  -> :!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultVi

有没有办法可以成功加载JS库?在


Tags: 代码命令read错误evaljsopenjquery
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:04

您只能使用不依赖于DOM的库,因为它显然不可用于服务器端。这种普遍可用的库的一个例子是胡子.js. 在

编辑:看起来有一种方法,很明显传单在没有DOM的情况下仍然是有用的-一个人只需要稍微重新创建DOM,就像这个不错的家伙在这里展示的:https://github.com/rclark/server-side-leaflet。注意:不确定这是否与PyV8一起工作,您只能尝试一下。在

Edit2:在前面一点上做一点扩展:PyV8得到的是一个纯非基于浏览器的javascript运行时环境。它不知道什么是“窗口”或“文档”,因为V8不关心UI。sleel需要DOM来操作,所以它需要“思考”它位于浏览器中。rclark的服务器端传单需求节点.js特定的扩展,所以它在PyV8中不起作用。在

有一个javascript DOM实现,可能在PyV8中工作:https://github.com/andreasgal/dom.js/。您必须将其中提供的所有js源代码按正确的顺序加载到PyV8中—请注意,这个库只提供spidermonkey的说明,而不是V8。一、 这将是一个棘手的问题。在

因此,在我看来,您有以下几种选择(按复杂性和/或所需技能的增加而定):

  1. 在下面的线程中,有人显然已经为python解决了这个问题,但是显然使用了一些矩形近似,使用了OTR—请参见他在对已接受答案的注释中的github链接。我会检查一下这个,然后决定这个近似值是否足够好。Lookup country for GPS coordinates without Internet access
  2. 切换到基于浏览器的环境并直接使用传单。在
  3. 切换到节点.js使用rclark的港口。在
  4. 尝试在PyV8中加入DOM,可能使用andreasgal,然后使用说明书。在
  5. 根据您的需要调整说明书,使其不再有任何DOM依赖项(从使用窗口和/或文档在if (typeof(window) === 'object' && window !== null){...}中屏蔽任何内容开始)。如果你能做到这一点,我会向传单项目提出请求,因为许多其他人可能会从你的工作中获益。在

相关问题 更多 >

    热门问题