我试图在我的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库吗?
发布于 2014-04-16 05:40:18
您只能使用不依赖于DOM的库,因为它显然是不可用的服务器端。这样一个普遍可用的库的一个例子是mustache.js。
编辑:看起来有一种方法,显然传单我们仍然是有用的,没有DOM -一个只需先重新创建DOM,就像这个不错的家伙在这里展示:https://github.com/rclark/server-side-leaflet。注意:不确定这是否与PyV8一起工作,您只能尝试一下。
Edit2:在前面的一点上扩展一下:使用PyV8获得的是一个纯基于非浏览器的javascript运行时环境。它不知道什么是“窗口”或“文档”,因为V8不关心UI。传单需要DOM来操作,所以它需要“思考”它存在于浏览器中。rclark的服务器端传单需要node.js特定的扩展,所以它不能在PyV8中工作。
有一个javascript实现可以在PyV8:https://github.com/andreasgal/dom.js/中工作。您必须按照正确的顺序将那里提供的所有js源加载到PyV8中--注意,这个库只为蜘蛛猴提供说明,而不是V8。也就是说,这将是一个棘手的问题。
因此,在我看来,您有以下选项(按所需的复杂性和/或技能增加的顺序排列):
if (typeof(window) === 'object' && window !== null){...}的窗口和/或文档开始。如果你能做到这一点,我会向传单项目提出一个拉请求,因为许多其他人可能从你的工作中获益。https://stackoverflow.com/questions/23098477
复制相似问题