我最近开发了一个google chrome扩展程序,它使用了使用FireBreath框架制作的NPAPI插件。我刚刚发现谷歌将很快停止使用这些类型的插件,并最终禁止使用它们的所有现有扩展。所以,我想最终转向NaCl / PPAPI架构,但我不确定这个架构是否能够支持我目前在NPAPI插件中所做的工作。
在我目前的NPAPI插件中,我支持OSX和Windows。在OSX版本上,插件执行system()函数,该函数执行一个小的1行AppleScript。它看起来像这样:
osascript -e 'tell app ...
在Windows版本上,它执行COM库中的函数。两个版本最终都做了同样的事情。我的另一个选择是执行python脚本,如果我要走这条路线,我很可能想在本机组件中嵌入python。
使用NaCl / PPAPI是否还有这种可能性?
答案 0 :(得分:5)
运行任意system()函数或从COM库执行任意函数的能力是NPAPI弃用的第一个原因。同样用于执行python脚本(当然可以在NaCl中执行python脚本 - 但它也无法调用system()函数或COM库)。
这不是新闻:正如Chromium发布当天Chrome漫画书中所提到的,NPAPI插件不受限制,这是一个大问题:http://www.google.com/googlebooks/chrome/small_30.html
即便如此,这种情况只能容忍这么长时间。插件被容忍了五年,因为有些重要的东西在没有它们的情况下是无法实现的,但现在是时候杀死插件并确保浏览器中没有任何东西可以直接访问操作系统。
如果你想实现一些目前无法在浏览器中实现的功能,因为没有合适的API,正确的方法是在chrome-dev上询问它并将此API添加到Chromium(也可能是其他浏览器) 。例如,最近添加了对COM端口(而不是库)的访问(参见http://developer.chrome.com/apps/app_hardware.html)。
答案 1 :(得分:3)
由于您已经在使用扩展程序,因此您可能需要查看Native Messaging来替代您使用NPAPI。
答案 2 :(得分:0)
如果您不需要浏览器和应用程序之间的交互,则可以使用外部协议支持。您需要在Windows上的注册表中注册协议。我不知道外部协议如何在OSX上运行。当用户点击外部协议链接时,Chrome会显示一个对话框,允许用户启动该应用程序。