如何在初始化时向javascript引擎注册Python DOM对象?

2024-10-04 03:17:00 发布

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

背景:

我正在创建一个名为itbrowz的python应用程序。该应用程序的最终预期结果是成为一个可以直接在iTerm2中使用的可通过的现代web浏览器。为此,我需要将一个可嵌入的JavaScript引擎集成到我的项目中

我已经做了以下工作:

该项目正在使用一个名为AdvancedHTMLParser的Python库,它(基本上)在Python中实现DOM接口。还存在一个本地缓存,其中包含给定页面上所有单个引用/内联脚本的单独文件

我一直在探索如何使用python绑定到各种JavaScript引擎,例如v8eval。这个方法不起作用的原因是它没有公开一种在底层v8引擎中注册Python端文档对象的方法,因此期望操作预先存在的文档对象的JavaScript脚本都将失败。对于spidermonkey引擎及其相关的Python语言绑定也是如此——无法将Python端DOM传递给JavaScript引擎的计算上下文

问题:

我试图解决的核心问题是,document对象本身是用Python构建的,据我所知,在初始化引擎时,不可能让JavaScript引擎使用Python端的document对象。这是我需要解决的第一个主要问题。但是,即使有可能解决将Python端文档对象传递给JavaScript引擎的问题,我仍然需要一种方法来可靠地将Python端文档对象与新操纵的JavaScript端文档对象状态同步

您有什么想法可以实现通过Python/JavaScript语言桥注册和同步文档对象的目标


Tags: 项目对象方法文档引擎脚本web语言
1条回答
网友
1楼 · 发布于 2024-10-04 03:17:00

在又一天漫长的研究之后,我发现了一些可以解决我的用例的东西。它被称为Js2Py。从“高级用法”标题下的自述文件:

"Moreover, you can use Python objects from your JavaScript code if you add them to the scope"

这将允许我将在Python中创建的文档对象修补到JavaScript计算上下文中。此外,似乎js2py通过其函数translate_file()提供了强大的功能,可以将JavaScript文件整体转换为python文件。这可以完全解决跨语言文档对象同步问题,因为所有执行的代码都将使用相同的语言,这意味着它们可以共享相同的文档对象,甚至可能共享相同的事件循环

唯一的缺点似乎是从JavaScript到Python的动态转换可能会带来大量的计算开销。该库目前还处于1.0之前的版本,因此可能仍有一些bug隐藏在库本身的某个地方。尽管如此,这似乎是像itbrowz这样的激情项目的最佳选择

相关问题 更多 >