【发布时间】:2015-01-11 11:34:58
【问题描述】:
我研究了将 Web 浏览器嵌入到应用程序中的各种方法(例如通过特定于操作系统的方式的 IE 或 Safari,或通过 XULRunner 的 Firefox/Mozilla,或通过 Chromium 嵌入式框架的 Chrome)并且我已经管理将 CEF 与我的应用程序集成到我确信它会按预期工作的程度。现在,在我看来,每当我想修改 DOM(例如添加或删除元素)时,我都必须通过 Javascript 来执行此操作,即我的应用程序调用实际工作完成的 Javascript。
我想知道为什么会这样。我的(天真?)信念是,例如,如果我在 Javascript 中调用 appendChild,附加孩子的实际“工作”最终将由 C/C++ 函数执行,因为浏览器本身是用 C/C++ 编写的,而不是在 Javascript 中。所以,我想知道为什么在嵌入式网络浏览器中我不能直接调用这个 C/C++ 函数而不是通过 Javascript。我知道对于一般脚本,出于安全原因,您不需要除 Javascript 之外的其他语言,但如果浏览器嵌入到我可以控制的应用程序中,这不应该是原因,不是吗?
我错过了什么?
【问题讨论】:
-
例如在 IE 中,您可以在 BHO 中编写代码,使用 C++ 和 C# 以及任何其他 .net 语言与 DOM 交互。在 Chrome 中,您可以通过 Native Client 使用 C 和 C++。不要期望其中任何一个会更快 - 毕竟 DOM 在 JavaScript 中非常快,并且有一些库可以像 React 一样快速维护虚拟 dom 并进行批量更新。
-
你这样做的目的是什么?
-
你真的以为,研究各个浏览器的C++源码,阅读规范,调用函数(每个浏览器不同,每个版本的浏览器可能会有变化),比调用JS容易吗? ,所有浏览器都一样吗?就像你想在商店里买东西,而你的房子在商店后面,所以你希望老板让你从窗户爬进来,而不是绕着商店走。
-
@IvanKuckir:DOM 是一种与语言无关的标准。以this Java package 为例。
标签: javascript dom xulrunner chromium-embedded