# 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。
- 基礎文檔
- 綜述
- 調試
- 格式:Manifest文件
- 模式匹配
- 改變瀏覽器外觀
- Browser Actions
- Context Menus
- 桌面通知
- Omnibox
- Override替代頁
- Page Actions
- 主題
- 與瀏覽器交互
- 書簽
- Cookies
- chrome.devtools.* APIs
- Events
- chrome.history
- Management
- 標簽
- 視窗
- 實現擴展
- 無障礙性(a11y)
- 背景頁
- Content Scripts
- 跨域 XMLHttpRequest 請求
- 國際化 (i18n)
- 消息傳遞
- Optional Permissions
- NPAPI 插件
- 完成并發布應用
- 自動升級
- 托管
- 打包
- 規范和協議
- 應用設計規范
- 開發人員協議
- 免責聲明