嵌入口译员的最佳浏览器

时间:2013-09-16 23:55:53

标签: c++ python browser scripting interpreter

我有决定。其中一些实际上,并且在我再次信任它之前,堆栈溢出社区从未让我失望。

我总是发现在浏览器中运行另一种脚本语言的想法非常吸引人。更具体地说:python或ruby。更具体一点:python。我知道由于JavaScript的惯性,没有什么可以取代JavaScript,尤其是最近。我也知道python不能在一生中编码沙盒。但是,如果我只能看到一个简单的脚本在浏览器上执行,运行一个本机解释器(没有Silverlight),我可能会死在一块。

我真正的追求是找到将python解释器集成到浏览器中的最佳解决方案

我认为这将是一个非常轻量级或/和模块化的开源浏览器,采用CPython解释器并开始集成。

由于堆栈溢出是关于特定问题的,基于我的假设,这里有一个问题:是否有一个轻量级的开源浏览器,模块化足以使我的目标更容易?

1 个答案:

答案 0 :(得分:0)

首先:

  

是否有轻量级的开源浏览器,模块化足以让我的目标更容易?

不是,不。 WebKit与您将获得的距离非常接近,但它不是非常轻量级,并且您希望的大部分功能都不会通过简单的接口公开。 (此外,WebKit公开的DOM是严格的W3C DOM; Safari和Chrome所做的所有东西都不能通过这种方式呈现不太标准的真实页面。)看看Chromium是如何破解JS引擎的并将其替换为另一个可能会有所帮助,此时您可以构建相同的API作为CPython的包装器,但这并不容易。

Gecko非常模块化,过去很容易插入,但在最近的版本中已不再适用。除非你愿意使用XULRunner 1.9.2,否则你将会为你做很多工作。

除了你想要一个纯文本的浏览器之外,其他任何开放源代码都太弱而无法显示现代网页......在这种情况下,lynx和链接都是单片的,所以我能想到的唯一选择就是emacs w3 -mode。


然而,有一个更简单的方法:只需将Python引擎插入现成的浏览器。

NPAPI(除了IE之外的所有东西)和ActiveX(IE)都足够强大,可以满足您的需要:将自定义对象作为<object>公开给浏览器,并从您的代码中访问DOM。嵌入CPython并不是那么难。使用FireBreath代替直接NPAPI和ActiveX更加容易。我相信至少有两个项目允许你用Python编写FireBreath插件和/或将一个通用的CPython解释器嵌入到FireBreath插件中,这可能就是你所需要的,开箱即用。

对于Gecko,还有PyXPCOM。您可以使用嵌入式CPython解释器构建XUL扩展,并通过XPCOM访问浏览器,然后使用PyDOM在该XPCOM接口之上构建JS样式的DOM全局​​变量。我知道这个已经完成了;我很确定PyXPCOMExt是一个死的项目,它可能甚至不会构建比XULRunner 1.9.2更新的东西,但它应该作为一个例子(假设你知道所有的许多和复杂的方式,现代XPCOM与过去不同......)。


另一种选择是按原样嵌入浏览器引擎,并使用其嵌入API和一些JS代理/存根代码来伪造在页面上运行嵌入式Python脚本。 PyQt,Cocoa WebKit绑定等都可以做到这一点; Apple提供了开始使用ObjC WebKit文档所需的代码示例。


同时,如果你不需要浏览器是开源的,那么IE就可以嵌入不同的脚本引擎,默认的IronPython安装挂钩,并且知道如何在DOM内部进行操作。因此,<script type="text/python" language="python">的本地网页正常运作。


最后,尽管你不想要Silverlight ......在Python中构建Python解释器,将其编译为Silverlight并在浏览器中以这种方式拥有完整的解释器也并不难。唯一困难的部分是将IronPython stdlib放在某处。或者......至少有两种商业产品可以为您完成所有这些,所以您不需要这样做。


有关详细信息,请参阅Python Wiki上的WebBrowserProgramming,尽管其中大部分内容可能已过时。