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,但现在我想转向将得到更长期支持的东西。
提前致谢。
最佳答案
仅仅为了“调用一些C++代码”而安装NPAPI插件实际上并不是一件好事。 NPAPI 插件将适用于所有网站,而不仅仅是您的附加组件...您是否确保如果随机网站以您意想不到的方式访问这些内容,这些内容不会损坏?
无论如何,现在在 Firefox 中运行二进制代码有不同的机制:
- js-ctypes是最不痛苦且推荐的方法。基本上,您将定义一个可以导入到 Javascript 中并与之交互的 C API/ABI。
- XPCOM 二进制组件。基本上整个 Firefox 后端都是使用二进制 XPCOM 组件编写或粘合在一起的。也可以在附加组件中实现它们,尽管入门的学习曲线相当陡峭,并且文档分散在许多地方并且几乎“不完整”。另一个巨大的缺点是您需要为每个新的 Firefox 版本重新编译和重新测试模块(js-ctypes 则不然)。
使用附加 SDK 会使事情变得更加复杂,但您应该已经习惯了,因为您现在正在使用 NPAPI 插件。
我建议您首先确定您的附加组件中是否确实需要二进制文件,或者是否需要 JS 实现(具有现代功能,例如类型化数组,甚至可能通过 emscripten 的 asm.js)和 HTML5(canvas 、音频/视频)也可以。如果没有,至少轻量级 js-ctypes 可以。
此外,Firefox 中的 NPAPI 插件目前还不会消失。目前它们将可用,但用户必须启用它们(点击播放)。附加组件可能可以解决这个问题,暂时根据需要启用它们。所以没必要着急。
关于firefox - Chrome 和 Firefox 不会长期支持 NPAPI。我有什么选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011884/