编程语言
首页 > 编程语言> > 嵌入Web浏览器时,Javascript是DOM交互的唯一选择吗?

嵌入Web浏览器时,Javascript是DOM交互的唯一选择吗?

作者:互联网

我已经研究了将Web浏览器嵌入到应用程序中的各种方法(例如通过特定于操作系统的IE或Safari,或通过XULRunner进行的Firefox / Mozilla或通过Chromium Embedded Framework进行的Chrome),并且设法集成了CEF在我确信自己的应用程序可以按预期运行的所有点上.现在,在我看来,每当我想要修改DOM(例如添加或删除元素)时,都必须通过Javascript来执行此操作,即我的应用程序调用Javascript来完成实际工作.

我不知道为什么会这样.我的想法(天真?)是,例如,如果我在Javascript中调用appendChild,则实际上,附加子项的实际“工作”将最终由C/C++函数执行,因为浏览器本身是用C/C++而不是Javascript编写的.因此,我想知道为什么在嵌入式Web浏览器中,我不能直接调用此C/C++函数,而不能通过Javascript调用它.我了解,出于安全原因,对于常规脚本,您不希望使用Javascript以外的其他语言,但是如果将浏览器嵌入到应用程序中,无论如何我都可以控制,这不是原因,不是吗?

我想念什么?

解决方法:

CEF被实现为铬content api和您的应用程序之间的一层.使用CEF时,Chromium是CEF内的一个库,您只能访问CEF的Public API,该API或多或少地受到铬含量api所利用的限制(请注意,没有将浏览器创建为可嵌入的插件,然后演变为应用程序,则总是相反).内容API是Google工程师必须对某些形式的自省进行形式化的方式,但是由于浏览器本身并不是完全模块化的,因此它们并没有完成.有关铬代码的工作正在进行中,以将特定的“全能”组件分离为您可以随意选择的更通用的组件.

因此,在使用CEF时,您不能简单地了解Chrome的实现细节:您需要对其进行修补以实现它本身不会公开的内容. CEF为DOM遍历实现了一个类(请参见here),但是您只能选择DOM,而不能对其进行更改.

也就是说,在C端,您可以执行一些任意操作,例如检查/处理http请求(例如,允许您将javascript注入页面),以及直接从C运行任意javascript代码,这可以自己完成,则可以通过不同的路径(在C或V8扩展中可以直接在C中进行编码)来以异步方式回调C代码.

有关更多详细信息,请参见https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.

可以自定义CEF或直接使用铬源代码,但是那是巨大的.我听说过的其他解决方案在API限制方面大致相同,例如AwesomiumMozilla’s Gecko等.

标签:dom,chromium-embedded,xulrunner,javascript
来源: https://codeday.me/bug/20191028/1955059.html