gpt4 book ai didi

C++ 中的 Firefox 附加组件

转载 作者:行者123 更新时间:2023-12-02 03:44:46 24 4
gpt4 key购买 nike

Firefox 提供了 XPCOM API 接口(interface),用于用 C++ 编写附加类,并允许第三方 Web 应用程序访问它们。我想知道 - 是否有任何其他方法可以实现这些好处(即用 C++ 编写附加组件并提供 JavaScript 接口(interface),以便任何 JavaScript 应用程序都可以使用此接口(interface)并最终使用 C++ 类功能)?

最佳答案

是的,可以用 C++(或 Javascript)编写 XPCOM 组件并将它们公开到网站上。您可以在 JavaScript-global-propertyJavaScript-global-constructor 等类别中注册它们。这些东西通常没有很好的记录,如果有的话。如果您想了解更多信息,请阅读代码(例如 mxr )。

但是出于很多原因,强烈建议不要这样做:

  • 很难确保这些东西实际上是安全的并使其可靠地工作。
  • 很难控制哪些网站可能实际使用新的 API。 JavaScript-global-property 和 friend 将对所有网站可用!
  • 您的附加组件会将新名称引入全局 javascript 命名空间,这可能会与网站代码发生冲突。 (正因为如此,许多新的 WebAPI 并没有直接引入全局命名空间,而是成为 navigator 的一个属性)。
  • 由于这些原因,addons.mozilla.org 网站将只接受使用此机制的附加组件作为规则的异常(exception),并且仅当作者证明需要使用并且没有真正的替代方案时。

MDN有几篇关于网页到扩展通信的文章,反之亦然,你可以使用,例如"Interaction between privileged and non-privileged pages" .

此外,不鼓励在扩展中传送二进制 XPCOM 组件:

  • 您需要针对每个 Gecko 版本(每六周)重新编译二进制文件,因为自 Firefox 4 以来二进制组件都带有版本标记。
  • (点)版本之间的二进制 API/ABI 并不像您希望的那样稳定。实际上,API/ABI 经常在游戏后期无意中损坏,给很多用户造成很多不必要的崩溃,例如bug 828296 .
  • 平台开发者officially said binary components in extensions are a hassle .

相反,您应该尽可能使用 Javascript,和/或使用 C-API/ABI 创建一个普通的二进制库(.so、.dll、.dylib)并使用 js-ctypes .你可以用 javascript 实现你的 XPCOM 组件,然后它会用 js-ctypes 调用你的库。据我所知,现在大多数附加组件都切换到了 js-ctypes。

关于C++ 中的 Firefox 附加组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com