Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌入解释器的最佳浏览器_C++_Python_Browser_Scripting_Interpreter - Fatal编程技术网

C++ 嵌入解释器的最佳浏览器

C++ 嵌入解释器的最佳浏览器,c++,python,browser,scripting,interpreter,C++,Python,Browser,Scripting,Interpreter,我有一个决定要做。事实上,他们中的一些人,而且在我再次信任它之前,堆栈溢出社区从未让我失望过 我一直觉得在浏览器中运行另一种脚本语言的想法很吸引人。更具体地说:python或ruby。更具体地说:python。我意识到,由于JavaScript的惯性,没有任何东西可以取代JavaScript,尤其是最近的。我还意识到,python不可能在一辈子的编码中被正确地沙盒化。但如果我能看到一个简单的脚本在浏览器上执行,运行一个本地解释器(没有Silverlight),我可能会一命呜呼 我真正的追求是找到

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

我一直觉得在浏览器中运行另一种脚本语言的想法很吸引人。更具体地说:python或ruby。更具体地说:python。我意识到,由于JavaScript的惯性,没有任何东西可以取代JavaScript,尤其是最近的。我还意识到,python不可能在一辈子的编码中被正确地沙盒化。但如果我能看到一个简单的脚本在浏览器上执行,运行一个本地解释器(没有Silverlight),我可能会一命呜呼

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

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

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

首先:

是否有一个轻量级的开源浏览器,其模块化程度足以使我的目标更容易实现

不是真的,不是。WebKit与您将要获得的功能非常接近,但它不是非常轻量级的,而且您想要的许多功能都不是通过简单的接口公开的。(另外,WebKit公开的DOM是严格的W3C DOM;Safari和Chrome用于呈现不太标准的真实页面的所有内容都无法通过这种方式访问。)看看Chrome是如何撕毁JS引擎并用另一个引擎替换它的,也许会有所帮助,在这一点上,您可以构建与围绕CPython的包装器相同的API,但这并不容易

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

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


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

NPAPI(除IE外的所有功能)和ActiveX(IE)都足够强大,可以执行您想要的操作:将自定义对象作为
s公开到浏览器中,并从您的代码访问DOM。嵌入CPython并不是那么难。使用非直接NPAPI和ActiveX更容易。我相信至少有两个项目可以让您用Python编写FireBreath插件和/或在FireBreath插件中嵌入通用的CPython解释器,这可能就是您所需要的全部

对于Gecko,还有PyXPCOM。您可以使用嵌入式CPython解释器构建XUL扩展,并通过XPCOM访问浏览器,然后使用在XPCOM接口上构建JS风格的domglobals。我知道这件事已经完成了;我很确定这是一个死气沉沉的项目,它甚至可能不会针对比XULRunner 1.9.2更新的任何东西进行构建,但它应该作为一个例子(假设您知道现代XPCOM与过去不同的所有复杂方式…)


另一种选择是只嵌入一个浏览器引擎,并使用其嵌入API和一些JS代理/存根代码在页面上模拟运行嵌入式Python脚本。PyQt、Cocoa WebKit绑定等都可以做到这一点;苹果公司提供了启动其ObjC WebKit文档所需的代码示例


同时,如果你不需要浏览器是开源的,IE有钩子来嵌入不同的脚本引擎,默认的IronPython安装钩子,并且知道如何在DOM中操作。因此,带有
的本地页面就可以正常工作


最后,虽然您不需要Silverlight…但用Python构建Python解释器、将其编译为Silverlight并在浏览器中使用完整的解释器也不难。唯一困难的部分是把IronPython stdlib放在那里的某个地方。或者……至少有两种商业产品可以为您完成所有这些,所以您不必这么做



有关更多信息,请参见Python Wiki上的内容,尽管其中很多内容可能已经过时。

嵌入解释器非常简单,但它非常危险(恶意代码尝试)。是否希望像JS那样通过一些全局/内置对象访问DOM?我向那些认为DOM很简单的人征求建议。我想所有浏览器都能访问DOM吗?他们肯定至少需要构建一个DOM树,对吗?如果没有API将其公开,那么就不难对源代码进行一点修补并公开一个源代码。如果您认为添加源代码并不难,那么您显然从未入侵过web浏览器,甚至从未嵌入过web浏览器……它们是极其复杂的野兽。谢谢。我会仔细检查你建议的所有选项,然后自己选择。还有一个问题。因为我的目标不是让浏览器实际可用,所以我可以使用旧的引擎。你指的是Gecko的哪个版本?@Slytael:你可能想要Gecko 1.9.0(又名Firefox/XULRunner 3.0)或Gecko 1.9.2/3.6(又名Firefox/XULRunner 3.6)。如果您想这样做,项目或从该页面链接的分支之一可能只是开箱即用,并与
PyDOM
一起提供您所需的一切。