4

Chrome 和 Firefox 已经宣布他们将很快放弃对 NPAPI 插件的支持。

http://techcrunch.com/2013/09/23/say-goodbye-to-npapi/

对于 Chrome,如果我想从 JavaScript 执行一些 C++ 代码,我有几个选择,比如迁移到 Native Client (NaCl)。

但是我在 Firefox 中有哪些选择?

所以基本上,我有一个使用附加 SDK 构建的 Firefox 附加组件,我想从附加内容脚本 (JavaScript) 调用一些 C++ 代码。我以前使用过 NPAPI,但现在我想转向将得到更长期支持的东西。

提前致谢。

4

1 回答 1

5

仅仅为了“调用一些 C++ 代码”而安装一个 NPAPI 插件实际上并不是一件好事。NPAPI 插件将可用于所有网站,而不仅仅是您的附加组件...您是否确保如果随机网站以您没想到的方式访问它,这些东西不会损坏?

无论如何,今天在 Firefox 中运行二进制代码有不同的机制:

  1. js-ctypes是最不痛苦和推荐的方法。基本上,您将定义一个可以导入到 Javascript 中并与之交互的 C API/ABI。
  2. XPCOM 二进制组件。基本上,整个 Firefox 后端是使用二进制 XPCOM 组件编写或粘合在一起的。也可以在附加组件中实现它们,尽管入门学习曲线非常陡峭,并且文档分散在许多地方并且几乎“不完整”。另一个巨大的缺点是你需要为每个新的 Firefox 版本重新编译和重新测试你的模块(不是 js-ctypes 的情况)。

使用 Add-on SDK 会使事情进一步复杂化,但您应该已经习惯了,因为您现在正在使用 NPAPI 插件。

我建议您首先确定您的附加组件中是否真的需要二进制文件,或者是否需要 JS 实现(具有现代功能,例如类型化数组,甚至可能通过 emscripten 实现 asm.js)和 HTML5(画布、音频/视频)也可以。如果没有,至少轻量级的 js-ctypes 可以。

此外,Firefox 中的 NPAPI 插件现在并没有消失。它们暂时可用,但用户必须启用它们(点击播放)。目前,附加组件可能会解决这个问题,根据需要启用它们。所以没有必要急于求成。

于 2013-09-25T22:41:23.813 回答