NPAPI 迁移到 NaCl 的 Google chrome 扩展

Posted

技术标签:

【中文标题】NPAPI 迁移到 NaCl 的 Google chrome 扩展【英文标题】:Google chrome extension with NPAPI moving to NaCl 【发布时间】:2013-10-02 19:11:07 【问题描述】:

我最近开发了一个谷歌浏览器扩展,它使用了一个使用 FireBreath 框架制作的 NPAPI 插件。我刚刚发现 google 将很快停止使用这些类型的插件,并最终禁止所有使用它们的现有扩展。所以,我想最终转向 NaCl / PPAPI 架构,但我不确定这个架构是否甚至可以支持我目前在 NPAPI 插件中所做的事情。

在我当前的 NPAPI 插件中,我支持 OSX 和 Windows。在 OSX 版本上,插件执行 system() 函数,该函数执行一个小的 1 行 applescript。它看起来像这样:

osascript -e 'tell app ... 

在 Windows 版本上,它执行 COM 库中的函数。两个版本最终都做了同样的事情。我的另一个选择是执行 python 脚本,如果我要走这条路,我很可能希望将 python 嵌入到本机组件中。

使用 NaCl / PPAPI 是否有可能实现这一点?

【问题讨论】:

【参考方案1】:

能够从 COM 库运行任意 system() 函数或执行任意函数是 NPAPI 弃用的第一大原因。同上执行 python 脚本(当然,您可以在 NaCl 中执行 python 脚本 - 但它也不能调用 system() 函数或 COM 库)。

这不是新闻:正如 Chrome 漫画书在 Chromium 发布当天所指出的那样,NPAPI 插件不受限制,这是一个大问题:http://www.google.com/googlebooks/chrome/small_30.html

在当时就很明显,这种情况只能容忍这么久。插件被容忍了五年,因为一些重要的事情没有它们就无法实现,但现在是时候杀死插件并确保浏览器中的任何东西都不能直接访问操作系统。

如果你想实现一些目前无法在浏览器中实现的功能,因为没有合适的 API,正确的方法是在 chromium-dev 上询问它并将这个 API 添加到 Chromium(可能还​​有其他浏览器) .例如,最近添加了对 COM 端口(不是库)的访问(参见 http://developer.chrome.com/apps/app_hardware.html)。

【讨论】:

该插件目前实际做的是与Skype交互。它设置Skype状态。令人失望的是,我很快将无法在现有的 chrome 浏览器中执行此操作。感谢您的反馈,我会在 chromium-dev 上询问。 距离浏览器可以处理所有事情的日子还有好几年。文件系统访问,例如,如果您需要在 Autocad 等真实应用程序中编辑文件,则当前的沙盒 JS API 不起作用。 Google 所做的所有决定都是在企业中巩固 IE。【参考方案2】:

由于您已经在使用扩展程序,您可能希望查看Native Messaging 来替代您对 NPAPI 的使用。

【讨论】:

Native Messaging 不起作用,因为我与之交互的进程不支持它。 你说你开发了一个NPAPI插件;在本机消息传递模型中,您的扩展程序与之对话的进程将是您创建的二进制文件,它将与您的 NPAPI 插件具有相同的代码,减去所有 NPAPI 胶水,而是使用本机端的本机消息处理。您最终与之交谈的进程大概也支持作为 NPAPI 插件加载,但这并不意味着 NPAPI 不能作为中介。 是的,我知道我可以搭建一座桥梁,但这将是我最后的选择。我喜欢 NPAPI 组件打包在一个易于安装的扩展包中。必须安装浏览器扩展程序然后安装单独的本机组件,如果我能提供帮助的话,我不想这样做。【参考方案3】:

如果您不需要浏览器和应用程序之间的交互,您可以使用外部协议支持。您需要在 Windows 的注册表中注册协议。我不知道外部协议如何在 OSX 上工作。当用户点击外部协议链接时,Chrome 会显示一个对话框,允许用户启动应用程序。

【讨论】:

以上是关于NPAPI 迁移到 NaCl 的 Google chrome 扩展的主要内容,如果未能解决你的问题,请参考以下文章

在 NaCl 中使用 Neon 编译错误

Firefox 未检测到 NPAPI 插件

在 C# 中构建 NPAPI 插件

QWebkit无法检测NPAPI插件

sql server 到 google 扳手迁移

从 google appengine 数据存储迁移到 google cloud bigtable 的最佳方法是啥?