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插件,通过如下步骤,你的扩展将能够调用它。

  1. 在你扩展的manifest.json文件中加入一个节,描述如何找到你的插件,以及其他一些信息,:
    {
      "name": "My extension",
      ...
      "plugins": [
        { "path": "content_plugin.dll", "public": true },
        { "path": "extension_plugin.dll" }
      ],
      ...
    }

    "path" 属性用于描述如何找到你的插件,路径是相对于manifest文件位置的。 "public" 属性指明是否允许普通页面加载你的插件,默认是false,也就是只有你的扩展才能加载这个插件。

  2. 创建一个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。