您的位置:首页>资讯列表>chrome插件开发教程>chrome插件Manifest V2 Manifest.json
chrome插件Manifest V2 Manifest.json原创
作者:依云 文章分类:chrome插件开发教程 阅读数:1693 最后发布时间:2019-09-14

       [chrome插件Manifest V2 Manifest.json],由[依云]编写,chrome插件开发教程,是篇chrome插件核心文件[博客文章]介绍,主要介绍:chrome插件Manifest V2 介绍什么是Manife


chrome插件Manifest V2 介绍

什么是Manifest

Manifest.json文件是5 移动App的配置文件,用于指定应用的显示名称、图标、应用入口文件地址及需要使用的设备权限等信息。是扩展的配置文件,指明了扩展的各种信息。


从Chrome 18版本开始,Manifest V1就开始进入了淘汰的过程。Chrome内核对 Manifest V1 的支持计划具体可参见 Google 开发者网站上的日程表:manifest version 1 support schedule。


此文档提供了从 Manifest V1 升级到 V2 需要注意的检查清单,详细展示出在版本升级中发生的改动已经它们的意义。


manifest.json 格式如下

{
    // 必须的字段3个
    "name": "MyExtension", // 扩展名称
        "version": "1.0", // 版本。由1到4个整数构成。多个整数间用"."隔开
            "manifest_version": 2, // manifest文件版本号。Chrome18开始必须为2
                // 建议提供的字段3个
                "description": "",   // 描述。132个字符以内
                    "icons": {
        "16": "image/icon-16.png",
            "48": "image/icon-48.png",
                "128": "image/icon-128.png"
    }, //扩展图标。推荐大小16,48,128
    "default_locale": "en", // 国际化
        // 以下字段多选一,或者都不提供
        "browser_action": {
        "default_icon": "image/icon-128.png",
            "default_title": "My Test",
                "default_popup": "html/browser.html"
    }, //地址栏右侧图标管理。含图标及弹出页面的设置等
    "page_action": {
        "default_icon": "image/icon-48.png",
            "default_title": "My Test",
                "default_popup": "html/page.html"
    }, //地址栏最后附加图标。含图标及行为等
    "theme": { }, // 主题,用于更改整个浏览器的外观
    "app": { }, // 指定扩展需要跳转到的URL
    // 根据需要提供
    "background": {
        "scripts": [
            "lib/jquery-3.3.1.min.js",
            "js/background.js"
        ],
            "page": "html/background.html"
    }, // 指定扩展进程的background运行环境
    "chrome_url_overrides": {
        "pageToOverride": "html/overrides.html"
    }, //替换页面。详见注释1
    "content_scripts": [{
        "matches": ["https://www.baidu.com/*"],
        "css": ["css/mystyles.css"],
        "js": ["lib/jquery-3.3.1.min.js", "js/content.js"]
    }], // 指定在web页面运行的脚本。详见注释2
        "content_security_policy": "",  // 安全策略
            "file_browser_handlers": [],
                "homepage_url": "http://xxx", // 扩展的官方主页
                    "incognito": "spanning", // 或"split"。详见注释3
                        "intents": { }, // 用户操作意图描述
    "key": "", // 扩展唯一标识。不需要人为指定
        "minimum_chrome_version": "1.0", // 扩展所需chrome的最小版本
            "nacl_modules": [],  // 消息与本地处理模块映射
                "offline_enabled": true, // 是否允许脱机运行
                    "omnibox": {
        "keyword": "myKey"
    }, //ominbox即地址栏。用于响应地址栏的输入事件
    "options_page": "aFile.html", // 选项页。用于在扩展管理页面跳转到选项设置
        "permissions": [
            "https://www.baidu.com/*",
            "background",
            "tabs"
        ], //权限。详见注释4
            "plugins": [{
                "path": "extension_plugin.dll",
                "public": true
            }], // 扩展。可调用第三方扩展
                "requirements": { }, // 指定所需要的特殊技术。目前只支持"3D"
    "update_url": "http://path/to/updateInfo.xml",   // 自动升级
        "web_accessible_resources": [] // 指定资源路径,为String数组
}

chrome扩展API变化检查清单

  • 您是否使用了 browser_actions 属性或 chrome.browserActions 接口?

    • 使用单数形式的 browser_action 属性代替 browser_actions

    • 使用 chrome.browserAction 代替 chrome.browserActions

    • 使用 default_icon 代替 icons 属性

    • 使用 default_title 代替 name 属性

    • 使用 default_popup 代替 popup 属性

  • 您是否使用了 page_actions 属性或 chrome.pageActions 接口?

    • 使用 page_action 代替 page_actions

    • 使用 chrome.pageAction 代替 chrome.pageActions

    • 使用 default_icon 代替 icons 属性

    • 使用 default_title 代替 name 属性

    • 使用 default_popup 代替 popup 属性

  • 您是否使用了 chrome.self 属性?

    • 请改用 chrome.extension 来代替它

  • 您是否使用了 Port.tab 属性?

    • 请改用 Port.sender 来代替它

  • 您是否使用了 chrome.extension.getTabContentses() 或 chrome.extension.getExtensionTabs() 接口?

    • 请改为 chrome.extension.getViews( { “type” : “tab” } )

  • 您的扩展是否使用了背景页?

    • 使用 background 属性来代替 background_page 属性

    • 增加一个 scripts 或 page 属性用来指定背景页的代码

    • 增加一个 persistent 属性并将其值设为 false 将背景页转化为一个 event page

安全性变化检查清单

  • 您是否在HTML页面中使用了行内脚本?

    • 删除所有使用 <script> 标签嵌入的行内脚本,将它放入一个单独的外部JS文件中

  • 您是否使用了内联事件处理程序(譬如onclick)?

    • 从HTML代码中将它们删除,放入一个外部JS文件中,并使用 addEventListener() 来代替

  • 您的扩展是否向网页注入脚本,而此脚本需要使用扩展代码包里的资源(如图片或者脚本)?

    • 设置 web_accessible_resources 属性并列出这些需要被访问的资源文件(也可考虑为这些资源文件设置一个单独的Content Security Policy规则)

  • 您的扩展是否内嵌了外部页面?

    • 请指定 sandbox 属性

  • 您的代码或JS库中是否使用了 eval()、new Function()innerHTMLsetTimeout() 或其他方法将JS代码以字符串形式传递并运行?

    • 如果您是为了将JSON代码解析为对象,请使用 JSON.parse()

    • 使用符合Content Security Policy规则的库,如 AngularJS

    • 在你的Manifest文件中增加“sandbox”项,并将相关代码运行在沙箱中,使用 postMessage() 与运行在沙箱中的页面通信

  • 您是否记载了外部代码,如 jQuery 或 Google Analytics?

    • 考虑将这些外部库下载下来并打包在扩展代码里

    • 在Manifest文件的“content_security_policy”项中列出这些HTTPS域名

API变化小结

Manifest V2 在 browser action 和 page action 的接口方面做了一些改动,并将一些老的接口改成了新的接口。

Browser actions 的改动

名称上的变化有:

  • browser_actions 和 chrome.browserActions 属性被它们的单数形式 browser_action 和 chrome.browserAction取代

  • 在原来的 browser_actions 中,有 iconsnamepopup 属性,它们现在变为:

    • default_icon 表示 browser action 的显示图标

    • default_name 表示 tooltip 文字,当你把鼠标移动到 browser action 的图标上的时候就能看到它

    • default_popup 表示 browser action UI 的 HTML 页面(必须是字符串)

Page actions 的改动

与 browser actions 一样,page actions 的接口也做了一些调整:

  • page_actions 和 chrome.pageActions 属性被它们的单数形式 page_action 及 chrome.pageAction 所取代

  • 在原来的 page_actions 属性中,有 iconsnamepopup 属性,它们现在变为:

    • default_icon 表示 page action 的图标

    • default_name 表示 tooltip 文字,当你把鼠标移动到 page action 的图标上的时候就能看到它<

    • default_popup 表示 prowser action UI 的 HTML 页面(必须是字符串)

其它废弃或改动的API

  • background_page 属性更改为 background

  • chrome.self 属性被废除,请使用 chrome.extension 来代替

  • Port.tab 属性被 Port.sender 取代

  • chrome.extension.getTabContentses() 和 chrome.extension.getExtensionTabs() 接口被 chrome.extension.getViews( { “type” : “tab” } ) 取代

安全性变化小结

Manifest 升级到 V2 带来了一系列安全性方面的变化,而这些变化中有很多源自 Chrome 开始采用了 规则。如果您有兴趣了解更多关于此规则的影响,请阅读此规则的详细介绍。


行内脚本和内联事件处理程序被禁止


由于 Content Security Policy 的限制,行内脚本和内联事件处理程序被严格禁止,您必须使用外部的JS文件来进行处理。例如,原来您的代码里可能存在类似下面的写法:

<html><head>
  <script>
    function myFunc() { ... }
  </script></head></html>

这段代码现在在运行时会报错,您需要将 <script> 标签里的内容放到一个外部文件中,并通过 src=’path_to_file.js’ 来引用它。

同样的,内联事件处理程序也不会再被执行。例如下面这段代码在普通的页面中非常常见:

<body onload=”initialize()”><button onclick=”handleClick()” id=”button1”>

上面这段代码在 Manifest V2 的扩展中也无法执行。请删除内联事件处理程序,将它们放入外部JS文件中,并使用 addEventListener() 来注册事件处理程序。如下面的代码所示:

window.addEventListener(“load”, initialize);...document.getElementById(“button1”).addEventListener(“click”,handleClick);

这样可以更好更清楚地将您的扩展的处理逻辑与它的UI分离开。

嵌入的内容

有些时候,您的扩展可能需要嵌入能被外部使用或来自外部的内容。

被使用在外部页面中的扩展的资源:
如果您的扩展包含会被 content scripts 注入到外部页面中的资源,您需要使用 web_accessible_resources 属性一一列出这些资源。

{ // manifest file...
  "web_accessible_resources": [
    "images/image1.png",
    "script/myscript.js"
  ],...}

嵌入外部的内容:
Content Security Policy 只允许加载扩展包中的脚本和对象,这样可以避免外部代码通过引入一些不确定的代码带来的攻击。然后,有些时候您需要加载外部的资源如 jQuery 或 Google Analytics,有两个方法来解决:

  1. 将相关的库(如 jQuery)代码下载到本地并将其打包在您的扩展中。

  2. 您也可以在Manifest文件中的“content_security_policy”部分列出这些HTTPS域名来对CSP限定做一些放松。以加载 Google Analytics 库为例,您可以使用下面的方法:

            { // manifest file
              ...,
              "content_security_policy": "script-src 'self'          https://ssl.google-analytics.com; object-src 'self'",
              ...
            }

动态脚本的执行

在 Manifest V2 中最大的变化可能应该是扩展不再允许使用将脚本作为字符串传递并运行的方法,如 eval()、new Function()setTimeout()。值得注意的是,一些常用的JS库,如 Google Maps 及其他模板库中经常会用到这些技术。

Chrome 提供了一种机制,让页面运行在它们自己的源所在的沙箱中,但这些运行在沙箱中的页面不允许访问 chrome.* 接口。这种机制使得在新的 Content Security Policy 规则下,依然可以使用 eval() 一类的技术:

  1. 在您的Manifest文件中增加“sandbox”项

  2. 在“sandbox”项中,列出您需要运行在沙箱中的页面

  3. 通过 postMessage() 实现沙箱内外的页面之间的通讯

您可以通过阅读 Sandboxing Eval 文档来了解更多关于沙箱的知识。

深入阅读

Manifest V2 带来的这些变化是为了指导开发者开发出更安全、结构更健壮的扩展和应用。您可以从 Google 开发者文档 manifest file 了解所有V1到V2的变化及支持时间表。关于如何使用沙箱隔离代码运行环境,可以参考 sandboxing eval 文档。若想了解更多关于 Content Security Policy 的内容,您可以阅读扩展相关的文档或HTML5Rocks网站上关于它的介绍。



manifest.json格式如下

以上就是找插件网小编关于“manifest.jsonV2介绍? 

怎样manifest.jsonV2? -找插件网综合了介绍,基本使用,为以后插件打好基础


———————————————————————

[本文标题和网址]

chrome插件Manifest V2 Manifest.json

https://www.zhaocrx.com/Article/ArtGroupDetail-3834.html

版权声明:本文为找软件网博主「 依云 」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

文章评论
[chrome插件Manifest V2 Manifest.json]评论列表
查看更多