首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaScript加载PyV8库

使用JavaScript加载PyV8库
EN

Stack Overflow用户
提问于 2014-04-16 03:29:32
回答 1查看 2.6K关注 0票数 4

我试图在我的leaflet.js代码中使用库的一些特性。为了在代码中执行JS命令,我使用了PyV8。但我无法将leaflet.js库加载到PyV8上下文中。当我这么做的时候,

代码语言:javascript
复制
ctxt.eval(open("leaflet.js").read())

我知道错误:

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

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

代码语言:javascript
复制
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库吗?

EN

回答 1

Stack Overflow用户

发布于 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。也就是说,这将是一个棘手的问题。

因此,在我看来,您有以下选项(按所需的复杂性和/或技能增加的顺序排列):

  1. 在下面的线程中,显然有人已经解决了python的这个问题,但显然使用了OTR的矩形近似--参见他的github链接中的注释中的可接受的答案。我会检查这个,并决定这个近似是否足够好。Lookup country for GPS coordinates without Internet access
  2. 切换到基于浏览器的环境,直接使用传单。
  3. 切换到node.js并使用rclark的端口。
  4. 尝试在你的PyV8中加入一个DOM,可能会使用andreasgal,然后在那里使用传单。
  5. 根据您的需要调整传单,这样它就不再有任何DOM依赖(从屏蔽任何类似于if (typeof(window) === 'object' && window !== null){...}的窗口和/或文档开始。如果你能做到这一点,我会向传单项目提出一个拉请求,因为许多其他人可能从你的工作中获益。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23098477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档