This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:36.
Address: https://crxdoc-zh.appspot.com/extensions/npapi.html
Title: NPAPI 插件 - Google Chrome 扩展程序开发文档(非官方中文版)  •  Size: 20886

NPAPI 插件

利用 HTML 与 JavaScript 使您开发新的扩展程序变得非常容易,但是如果您有现存的遗留代码或专有代码,并且希望在您的扩展程序中重用,那该怎么办?您可以将 NPAPI 插件和您的扩展程序一起打包,使您可以从 JavaScript 中调用本机二进制代码。

警告

NPAPI 将要淘汰,请考虑使用其他替代方式。

NPAPI 应该尽可能地避免,除非没有其他任何可行的方式。

运行在NPAPI插件中的代码拥有当前用户的所有权限,不在沙箱中运行,对于恶意的输入不受到 Google Chrome 浏览器的任何保护。您在处理来自不受信任来源的输入时应当尤其小心(例如与内容脚本或者 XMLHttpRequest 一起使用时)。

由于 NPAPI 可能会给用户带来额外的安全风险,使用它的扩展程序在被 Chrome 网上应用店接受前要求人工审核。

详情

如何开发 NPAPI 插件的内容不在本文档的范围内,有关信息请参见 Mozilla 的 NPAPI 插件参考(英文)。

一旦您开发好了 NPAPI 插件,请遵循以下步骤让您的扩展程序使用它。

  1. 在您的扩展程序的 manifest.json 文件中添加一部分内容,描述插件的位置及其他有关属性:
    {
      "name": "我的扩展程序",
      ...
      "plugins": [
        { "path": "extension_plugin.dll" }
      ],
      ...
    }
    

    "path" 属性指定插件的路径,相对于清单文件。"public" 属性指定普通的网页能否访问您的插件,默认为 false,只有您的扩展程序才能加载插件。添加 "public": true 可以使您的插件能够在普通网页和内容脚本中访问,但是一定要小心,任何网页都能调用您的插件。

  2. 创建一个 HTML 文件,通过 MIME 类型加载您的插件。假定您的 MIME 类型为 "application/x-my-extension":
    <embed type="application/x-my-extension" id="pluginId">
    <script>
      var plugin = document.getElementById("pluginId");
      var result = plugin.myPluginMethod();  // 调用您的插件中的方法
      console.log("我的插件返回了:" + result);
    </script>

    这些代码可以放在后台页面或者您的扩展程序使用的其他任何 HTML 页面中。如果您的插件是公共("public")的,您甚至可以使用内容脚本通过编程方式向网页中插入您的插件。

安全性考虑

在您的扩展程序中包含 NPAPI 插件是危险的,因为插件对本地计算机的访问不受限制。如果您的插件包含漏洞,攻击者可能会利用漏洞在用户的计算机上安装恶意软件。所以要尽可能地避免使用 NPAPI 插件。

将您的 NPAPI 插件标记为公共的("public")增加了您的扩展程序受到攻击的可能性,因为插件直接暴露在网页内容中,使得恶意网站更容易操纵您的插件。所以尽可能不要将您的 NPAPI 插件标记为公共的。