谷歌浏览器扩展程序从 NPAPI 转移到 NaCl 的相关问题

5
我最近开发了一个使用FireBreath框架制作的NPAPI插件的Google Chrome扩展程序。现在我刚刚得知,谷歌将很快停止支持这些类型的插件,并最终禁止使用所有已使用这些插件的扩展程序。因此,我希望最终转移到NaCl / PPAPI体系结构,但我不确定该体系结构是否能够支持我当前在NPAPI插件中所做的工作。
在我的当前NPAPI插件中,我支持OSX和Windows。在OSX版本中,插件执行system()函数,以执行一个小的1行AppleScript,如下所示:
osascript -e 'tell app ... 

在Windows版本中,它执行COM库中的函数。两个版本最终都会执行完全相同的操作。我还有另一个选项是执行Python脚本,如果我选择这条路,我很可能会想要将Python嵌入到本机组件中。

使用NaCl / PPAPI还能实现这些吗?

3个回答

5
能够运行任意的system()函数或从COM库执行任意功能是NPAPI弃用的主要原因。同样,执行python脚本也是如此(当然,你可以在NaCl中执行python脚本,但它将无法调用system()函数或COM库)。
这不是新闻:正如在Chromium发布当天的Chrome漫画书中所指出的那样,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上询问。 - Ian Herbert
1
我们距离浏览器可以处理所有事情的那一天还有很多年。例如,文件系统访问,当前沙盒JS API如果您需要在像Autocad这样的真实应用程序中编辑文件,则无法正常工作。谷歌的所有决定只会使IE在企业中更加根深蒂固。 - Tony BenBrahim

3

由于您已经在使用扩展程序,您可能想要查看本机消息传递作为 NPAPI 的替代方案。


本地消息传递无法工作,因为我正在交互的进程不支持它。 - Ian Herbert
你说过你开发了一个NPAPI插件;在本地消息传递模型中,你的扩展程序所连接的进程将是一个二进制文件,该文件与你的NPAPI插件具有相同的代码,但减去了所有的NPAPI粘合剂,并使用本地端的本地消息处理。你最终所连接的进程可能也支持作为NPAPI插件加载,但这并不意味着NPAPI不能作为中介。 - smorgan
1
是的,我意识到我可以建立一个桥梁,但这将是我的最后选择。我喜欢 NPAPI 组件打包在一个易于安装的扩展商店中。如果可以避免的话,我不想安装浏览器扩展然后再安装单独的本地组件。 - Ian Herbert

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接