我试图在我的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){…}.如果你有这个工作,我会向传单项目提出拉动请求,因为许多其他人可能会从你的工作中获益.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。