嵌入解释器的最佳浏览器

2024-04-29 08:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个决定要做。实际上有一些,而且由于堆栈溢出社区从未让我失望过,所以我将再次信任它。在

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

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

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

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


Tags: 脚本沙盒编码堆栈浏览器开源模块化javascript
1条回答
网友
1楼 · 发布于 2024-04-29 08:11:20

第一个:

Is there a lightweight open-source browser, that is modular enough to make my goal easier?

不是,不是的。WebKit已经接近你想要的了,但是它不是非常轻量级的,而且你想要的很多功能都没有通过简单的接口公开。(另外,WebKit公开的DOM是严格的w3cdom;Safari和Chrome用来呈现不太标准的真实页面的所有功能都无法通过这种方式访问。)看看Chromium是如何破坏JS引擎并用另一个引擎替换它的可能会有所帮助,此时您可能可以构建与CPython包装器相同的API,但是这不容易。在

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

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


然而,有一种更简单的方法来实现这一点:只需将Python引擎插入现成的浏览器。在

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

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


另一个选择是直接嵌入一个浏览器引擎,并使用它的嵌入api和一些JS代理/存根代码来伪造在页面上运行的嵌入式Python脚本。PyQt、cococoa WebKit绑定等都可以做到这一点;苹果提供了启动ObjC WebKit文档所需的代码示例。在


同时,如果你不需要浏览器是开源的,IE有一些钩子来嵌入不同的脚本引擎,并且有一个默认的IronPython安装钩子,并且知道如何在DOM中操作。所以,一个带有<script type="text/python" language="python">的本地页面就可以了。在


最后,尽管您不希望使用Silverlight…用Python构建Python解释器,将其编译为Silverlight,并以这种方式在浏览器中拥有完整的解释器也不难。唯一困难的是把IronPython stdlib放在某个地方。或者…至少有两种商业产品可以为你做到这些,所以你不必这么做。在


更多信息请参见pythonwiki上的WebBrowserProgramming,尽管其中大部分可能已经过时。在

相关问题 更多 >