编程语言
首页 > 编程语言> > 使用PyV8在Python中加载JavaScript库

使用PyV8在Python中加载JavaScript库

作者:互联网

我试图在我的Python代码中使用leaflet.js库的一些功能.并且为了在代码中执行JS命令,我正在使用PyV8.但我无法将leaflet.js库加载到PyV8上下文中.当我这样做时,

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

我收到错误:

ReferenceError: window is not defined (  @ 9 : 68 )  -> of t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,doc

我甚至尝试加载jquery库,然后才想到传单可能依赖于它.但后来我得到了错误,

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库?

解决方法:

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

编辑:看起来有一种方法,显然传单在没有DOM的情况下仍然有用 – 首先必须在某种程度上重新创建DOM,因为这个好人在这里显示:https://github.com/rclark/server-side-leaflet.注意:不确定这是否与PyV8一起工作,你’我必须尝试.

Edit2:在前一点上稍微扩展一下:你用PyV8得到的是一个纯粹的非基于浏览器的javascript运行时环境.它不知道’窗口’或’文档’是什么,因为V8不关心UI. Leaflet需要DOM来运行,因此它需要“思考”它存在于浏览器中. rclark的服务器端传单需要node.js特定扩展,因此它在PyV8中不起作用.

这个javascript DOM实现可能在PyV8:https://github.com/andreasgal/dom.js/中有效.您必须以正确的顺序将所有提供的js源加载到PyV8中 – 请注意,此库仅提供spidermonkey的指令,而不是V8.即为了做到这一点,这将是棘手的.

因此,正如我所看到的,您有以下选项(按照增加的复杂性和/或技能要求):

>有人显然在下面的线程中解决了python的这个问题,但显然使用了一些使用OTR的矩形近似 – 在评论中看到他接受的答案的github链接.我会检查一下,然后判断近似值是否足够好. Lookup country for GPS coordinates without Internet access
>切换到基于浏览器的环境并直接使用传单.
>切换到node.js并使用rclark的端口.
>尝试以某种方式将一个DOM放入PyV8,可能使用andreasgal,然后从那里使用传单.
>根据您的需要调整传单,使其不再具有任何DOM依赖性(首先使用窗口和/或文档屏蔽任何内容,如if(typeof(window)===’object’&& window!= = null){…}.如果你有这个工作,我会向传单项目提出拉动请求,因为许多其他人可能会从你的工作中获益.

标签:python,javascript,gps,gis,pyv8
来源: https://codeday.me/bug/20190629/1322163.html