NPAPI 插件
使用HTML和JavaScript开发新扩展是十分容易的事情,不过如果你想在扩展中重用已经开发完成的代码和功能,你可以通过使用NPAPI插件到达目的。NPAPI插件使JavaScript代码能够调用本地二进制代码。
警告
NPAPI 是重型武器,当别的方法无法到达你的目的时,才建议使用。
运行在NPAPI插件中的代码拥有当前用户的全部权限,不能利用Google Chrome 的沙箱技术和其他安全防护技术。 在处理不可信任的输入, 如content scripts和XMLHttpRequest 时,你必须格外小心。
鉴于使用NPAPI可能引入的风险,使用了NPAPI的扩展在提交给web store或者extension gallery 时要经过人工审核。
更多信息
如何开发一个NPAPI插件超出了本文的范畴,具体请参看:Mozilla's NPAPI plugin reference以获得更多帮助。
如果你已经拥有一个NPAPI插件,通过如下步骤,你的扩展将能够调用它。
在你扩展的manifest.json文件中加入一个节,描述如何找到你的插件,以及其他一些信息,:
{ "name": "My extension", ... **"plugins": [ { "path": "content_plugin.dll", "public": true }, { "path": "extension_plugin.dll" } ]**, ... }
"path" 属性用于描述如何找到你的插件,路径是相对于manifest文件位置的。 "public" 属性指明是否允许普通页面加载你的插件,默认是false,也就是只有你的扩展才能加载这个插件。
创建一个HTML文件,mime-type为:application/x-my-extension" ,用于加载你的插件。
<embed type="application/x-my-extension" id="pluginId"> <script> var plugin = document.getElementById("pluginId"); var result = plugin.myPluginMethod(); // call a method in your plugin console.log("my plugin returned: " + result); </script>
这个页面可以被后台页面包含,或者任何你扩展会用到的其他页面。如果你的插件的 "public" 属性是true,,你可以通过脚本在页面中直接使用它。
安全注意事项
在你的扩展中包含一个NPAPI插件是一件危险的事情。因为NPAPI插件拥有访问你本地机器的完全权限而不受控制。如果你的插件不够健壮,包含漏洞,黑客可以通过溢出攻击利用漏洞来安装恶意软件到用户的机器。 有鉴于此,请尽可能的避免在扩展中使用NPAPI插件。
将NPAPI的 "public" 属性设置为true,也会增加你扩展受到攻击的可能性。因为这样一来,插件直接暴露给了页面内容,恶意网站能通过页面直接操纵你的插件。有鉴于此,尽量避免将"public"属性设置为true。