0

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

我一直觉得在浏览器中运行另一种脚本语言的想法很吸引人。更具体地说:python 或 ruby​​。更具体地说:python。我知道由于 JavaScript 的惯性,没有什么可以取代 JavaScript,尤其是最近。我也知道 python 不能在一生的编码中被正确地沙盒化。但是,如果我只能看到一个简单的脚本在浏览器上执行,运行一个本地解释器(没有 Silverlight),我可能会死得一塌糊涂。

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

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

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

4

1 回答 1

0

第一的:

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

不是真的,不。WebKit 与您将要获得的一样接近,但它不是很轻量级,并且您想要的大部分功能都没有通过简单的界面公开。(另外,WebKit 公开的 DOM 是严格的 W3C DOM;Safari 和 Chrome 为呈现不完全标准的现实世界页面所做的所有事情都无法通过这种方式访问​​。)看看 Chromium 如何淘汰 JS 引擎并用另一个替换它可能会有所帮助,此时您可能能够构建与围绕 CPython 的包装器相同的 API,但这并不容易。

Gecko 非常模块化,过去很容易插入东西,但在最近的版本中不再如此。除非您愿意使用 XULRunner 1.9.2,否则您将需要做很多工作。

其他所有开源软件都太弱了,无法显示现代网页,除非你想要一个纯文本浏览器……在这种情况下,lynx 和链接都是一体的,所以我能想到的唯一选择是 emacs w3-mode。


但是,有一种更简单的方法可以解决这个问题:只需将 Python 引擎插入现成的浏览器即可。

NPAPI(除了 IE 之外的所有东西)和 ActiveX (IE) 都足够强大,可以做你想做的事:将自定义对象作为<object>s 暴露给浏览器,并从你的代码中访问 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 标准库放在某个地方。或者……至少有两种商业产品可以为您完成所有这些工作,因此您不必这样做。


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

于 2013-09-17T00:42:25.903 回答