【问题标题】:Best browser to embed an interpreter in [closed]在[关闭]中嵌入解释器的最佳浏览器
【发布时间】:2013-09-21 06:22:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嵌入解释器真的很简单,但是非常危险(恶意代码尝试)。
  • 你想像 JS 那样通过一些全局/内置对象访问 DOM 吗?
  • 我向那些认为这很简单的人征求意见。我坚持所有浏览器都提供对 DOM 的访问权限?他们当然需要至少构建一个 DOM 树,对吧?如果没有 API 暴露它,那么稍微修补一下源代码并暴露一个并不难。
  • 如果您认为添加它并不难,那么您显然从未破解过,甚至没有嵌入过网络浏览器……它们是极其复杂的野兽。

标签: c++ python browser scripting interpreter


【解决方案1】:

第一:

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

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

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

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


但是,有一个更简单的方法来解决这个问题:只需将 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 了解更多信息,尽管其中大部分内容可能已过时。

【讨论】:

  • 谢谢。我将浏览您建议的所有选项并为自己选择。还有一个问题。由于我的目标不是让浏览器真正可用,因此我可以使用旧引擎。您指的是哪个版本的 Gecko?
  • @Slytael:您可能想要 Gecko 1.9.0(又名 Firefox/XULRunner 3.0)或 Gecko 1.9.2/3.6(又名 Firefox/XULRunner 3.6)。如果您想这样做,pyxpcomext 项目或从该页面链接的其中一个分支可能开箱即用,并且与PyDOM 一起为您提供所需的一切。
猜你喜欢
  • 2011-06-26
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2013-12-08
相关资源
最近更新 更多