Chrome和Firefox不会长期支持NPAPI。我有什么选择?

时间:2013-09-25 17:53:16

标签: firefox firefox-addon firefox-addon-sdk npapi browser-plugin

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

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

对于Chrome,如果我想从JavaScript执行某些C ++代码,我有几个选项,例如转移到Native Client(NaCl)。

但我在Firefox中的选择是什么?

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

提前致谢。

1 个答案:

答案 0 :(得分:5)

安装NPAPI插件只是为了调用一些C ++代码"实际上并不是一件好事。 NPAPI插件将可用于所有网站,而不仅仅是您的插件......如果随机网站以您不期望的方式访问它,您是否确保这些内容不会中断?

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

  1. js-ctypes是最不痛苦和推荐的方式。基本上,您可以定义一个C API / ABI,您可以在Javascript中导入并与之交互。
  2. XPCOM二进制组件。基本上整个Firefox后端使用二进制XPCOM组件编写或粘合在一起。也可以在附加组件中实现它们,虽然这是一个相当陡峭的学习曲线,但是文档分散在许多地方并且几乎不完整"。另一个巨大的缺点是你需要为每个新的Firefox版本重新编译和重新测试你的模块(不是js-ctypes的情况)。
  3. 使用附加SDK会使问题进一步复杂化,但您应该已经习惯了,因为您现在正在使用NPAPI插件。

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

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