💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# NPAPI 插件 使用HTML和JavaScript开发新扩展是十分容易的事情,不过如果你想在扩展中重用已经开发完成的代码和功能,你可以通过使用NPAPI插件到达目的。NPAPI插件使JavaScript代码能够调用本地二进制代码。 ## 警告 **NPAPI 是重型武器,当别的方法无法到达你的目的时,才建议使用。** 运行在NPAPI插件中的代码拥有当前用户的全部权限,不能利用Google Chrome 的沙箱技术和其他安全防护技术。 在处理不可信任的输入, 如[content scripts](content_scripts.html#security-considerations)和XMLHttpRequest 时,你必须格外小心。 鉴于使用NPAPI可能引入的风险,使用了NPAPI的扩展在提交给[web store](https://chrome.google.com/webstore)或者[extension gallery](https://chrome.google.com/extensions) 时要经过人工审核。 ## 更多信息 如何开发一个NPAPI插件超出了本文的范畴,具体请参看:[Mozilla's NPAPI plugin reference](https://developer.mozilla.org/en/Plugins)以获得更多帮助。 如果你已经拥有一个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。