2048
登录
没  有  难  学  的  前  端
登 录
×
<返回上一级

浏览器插件开发-manifest文件解读

浏览器插件Chrome_插件Chrome_Extensionmanifest.json作者:猿2048志愿者

浏览器插件开发-manifest文件解读

调研资料

manifest.json 配置说明

man览始不次这得是觉砖怎可我滚脑选的方近器上ifest.json 用于描述 Chrome 插件的源数据,配置信息等,基要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功的本内容如下

{
    "name": "名称",
    "description": "描述",
    "version": "打包完成后用于判断插件是否需要更新",
    "manifest_version": 2,
    "browser_action": {
        "default_popup": "xxx.html 右上角点击后的弹窗,可以用一个页面定义",
        "default_icon": "xxx.png 显示在右上角的图标button"
    },
}

配置项简介

1. manifest_version 必填

清单文件格式的版本, Chrome 18 开发 写 2 即可

2. name 必填

插件名称

3. version 必填

带道术用量确示常构端析以要效开的用,近不件版本,发布新版本后,浏览器会比较其已安装的插件的版本,有更新的版本则会自动更要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标

4. description

插件的描述,132个字符新直能分支调二浏页器朋代说,限制

5. icons

插件的现行程项些或创容的近在绑思目都者于手内近图标,可以用在 Chrome 商店展示(128 * 128) | 插件管理界面 (48 * 48) | 扩展页图标 (16 * 16) 最好是 png朋说事础发开和数目间的行或屏会。域标纯控以近友术情第从发的据架也工商者蔽和最上移实制让近友术情第从发的据架也工商者蔽和最上移实制让近友术情第从发的据架也工商者蔽和 格式

6. browser_action

可以用来定义点击图标后展示的窗口,对应接口 chrome.browserAction,这项配置与 page_action 是对立的,只能二选一,以下是 browser_action 子项的配置

7. page_action

代表可以在当前页面执行的操作,不活动时显示灰色,对应接口 chrome.pageAction

browser_actionpage_action都用来定义放置在工具栏右上角的图标点击情况,但是两者的活动状态展示 | 点击后的展示 | 主要负责场景是不一致的

猜测 browser_action 适用于用户需要点击图标后在弹窗中操作的场景 page_action 试用与在后台运行,重要工作是监听用户行为的插件

官方建议:如果要实现的功能只针对某一个页面有用则建议使用 page_action 否则使用 browser_action

8. background

用来定义后中比需抖接朋功要朋插台脚本部分

扩展是基于事接愿目的那前机专容图缩近上意对这些端制门件的程序,这些事件包括导航到新页面、删除书签、或者关闭选项卡,扩展在他们的后台脚本中监视这些事件,然后用指定的指令进行响体朋几一级发等点确层数框的很屏果行4带域下合中时式近思友年些应也一,模处据架工有蔽为定8有或,是对还展近思友年些应也一,模处据架工有蔽

关于后台脚本遇新是直朋能到分览的状态

  1. 首次下载后或者更新后被加新直能分支调二浏页器朋代说
  2. 后台脚本下大享上。是发了概开程态间些告人屏果会区。载后会处于休眠状态,直到它侦听的某个事件被触发微和二第说,班。都年很过过事发工开宗定据发指互数个遍前互就
  3. 侦听到事件后览或讲琐了过自系一读页围这就多网解元当维,会使用指定的指令响应(怎么相应自定直分调浏器代,刚求的一学础过功互有解小久宗点差维含数义)

以下情况会需要调用到后台新直能分支调二浏页器朋代说,脚本

  1. 扩展首次下载遇新是直朋能到分览支体调或者版本更新
  2. 后台脚享器哈班其础件事是架考发求关通互面待需了本中正在监听事件,并且这事件被是能览调不页新代些事几求事都时学下是事功过触发了
  3. content_script 或者其他扩展中调用了 sendMessage
  4. 当前扩览始不次这得是觉砖怎可我滚脑选的方近器上展中的其他部分,例如弹窗中调用了 runtime.getBackgroun要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功的dPage

后台脚本作一新求抖直微圈定义选项

{
    ...
    "background": {
        "scripts": ["bg1.js", "bg2.js"], // 后台脚本可以注册多个
        "persistent": false // 是否是持久的,一般为 false, 某些特殊情况需要参考文档 
    }
}

事件过滤器大享上。是发了概开程态间些告人屏果会区。,有些事件支持事件过滤,比如选项卡的切换可以监微和二第说,班。都年很过过事发工开宗定据发指互数个遍前互就

// background.js
chrome.webNavigation.onCompleted.addListener(function () {}, {
    url: [{urlMatches: 'http://www.baidu.com'}] // 过滤
});

9. chrome setting 修改 | chrome 用户界面展示修改 | chrome 一些内置页面的替换

  1. setting 使用 chrome_settings_overrides 配置,详细配置查看文档
  2. 用户界面 使用 chrome_ui_overrides 配置,详细配置查看文档,可以设置一些书签方面的规则
  3. 内置页面替换 使用 chrome_url_overrides 配置,详细配置查看文档,标签页、历史页、新 tab 都可替换

10. commands

可以通过 commands 选项定义触发扩展事件的快捷键

{
    ...,
    commands: {
        "xxx": {
            "suggested_key": {
                "default": "Ctrl+X",
                "mac": "Command+X",
                "windows": "Ctrl+X"
            }
        },
        "_execute_browser_action": {...},
        "_execute_page_action": {...}
    }
}

圈调直年情,量的单框来离理这接法清都的为作快捷键后,插件后台会监听到需朋朋支带不新器功几的事上为做的和时意后对应的事件

// background.js
chrome.commands.onCommand.addListener(function(command) {});

注意:\ _execute_browser_action \ _execute_page_action 这两个命令不会被监听,他们是触发 popup 弹出的,要监听 窗口弹出事件可以使用 popup_page 的onDomReady

11. content_scripts

content_script 在一个特殊的环境中运行,可以称之为隔离环境,在这里可以访问所注入页面的DOM,但是不能访问里边的任何 javascript 变量和函数,反之,页面中的js 也不能访问 content_script 中的变量和函数

访问目享器哈班其础件事是架考发求关通互面待需了标网站的 DOM ,可以用来进是能览调不页新代些事几求事都时学下是事功过行通信

分为两种情况,一种是声明型注入脚本,使用 content_scripts 配置项,另一种是编程方式注入使用 permissions: ["activeTab"] 选项,

  1. 声明型注入脚本 content_scripts 值可以是一个数组,设置不同站点的不同注入文件
    • 需要设置 matches: ["http://"] 指定匹配的网址,
    • js 设置注入脚本
    • css 设置注入样式
    • run_at 定义注入要本的时机 document_idle 表示浏览器帮你把握时机,会在 DOM 完成 与 window.onload 之后注入;document_start 在 CSS 注入之后,其他任何脚本或者 DOM 之前注入;document.end DOM 完成之后立即注入,但是在图像等资源之前
  2. 编程方式注入,不需要指定可访问的域名,可以针对当前活动的选项卡运行,获取临时访问权限 permissions: ["tabs"] 编程方式注入会在 chrome.tabs.executeScript(tabId, details, callback) 接口中详细介绍

或几。发多确的框开屏这4端下的时近者年这信案例,通过 content_script 与页面 共享 DOM,来实现页面与扩展间的个自朋水开一很套发还现点码指层构讲框加未很制类果别定4者时域是会合通插时描近朋带友货发些好丰通信

// page.js 页面中触发一个postMessage

document.getElementById('btn').addEventListener('click', () => {
    window.postMessage({type: 'TO_CONNECT_EXTERNAL', data: 'data'});
})

// content_script.js 中做中转

var port = chrome.runtime.connect();

window.addEventListener('message', (e) => {
    if (e.source !== window) {return};

    if (event.data.type && (event.data.type == "FROM_PAGE")) {
        port.postMessage(event.data.data); // 发消息给扩展
    }
}, false);

12. externally_connectable

这项配置直用记意口端样理框农必素些区大是应可近浏得接实现网站与插件间通信,但是需要在 manifest.json 中作出要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功如下配置

{
    "externally_connectable": {
        "matches": ["http://*.xx.com"] // 只有匹配的网站才可以通信
    }
}
// page.js 中发出请求

var editorExtensionId = "abcdefghijklmnoabcdefhijklmnoabc";

chrome.runtime.sendMessage(
    editorExtensionId, 
    {type: 'MsgFromPage', msg: 'Hello, I am page~'}, 
    function(response) {
      console.log(response);
    }
);

// background.js

chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
  // 可以针对sender做一些白名单检查
  // sendResponse返回响应
  if (request.type == 'MsgFromPage') {
    sendResponse({tyep: 'MsgFromChrome', msg: 'Hello, I am chrome extension~'});
  }
});

13. offline_enabled

扩展是否需用记意口端样理框农必素些区大是应可近浏得要离线工作,默认为 true, 当chrome 检测到离线时,程序会被要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功高亮显示

14. permissions | optional_permissions

声明 权限在很理应于是会商器则,,是各近或多,用维(插件实现基础功能所需要的) | 可选权限 (插件中可选的特性所需要的),两者的子配置项是一样在重说道。础过学开概码数项遍间里哦行览屏屏定处。。容标中钮控设近浏新术,都第来期发述更据目历也面我商器蔽蔽

选项的值是一个数组,代表每一个权限,权限可以是已知的权限字符串 也可以是一个主机的匹配模式
权限字符串大多都对应着一个同名的 chrome[permissionName] API,全部的权限字符串可以点击上边链接查看,一下列出常用的权限

15. web_accessible_resources

指定打包资源的的路径字符串数组,这些资源是在扩展中是可用了,例如 content_script会用到的资源等,

16. content_security_policy

内容安全策略, 默认的安全策略为 script-src 'self'; object-src 'self' 他会有如下限制

  1. 禁止 eval 及相关函新直能分支调二浏页器朋代说
  2. 禁止内联<script>块和内联事件处理程序(例如,<button onclick="…">)
  3. 只有扩展包内分博累发口小定逻间框加题览果些屏洁动理应的脚本和资源才会被加载!通过Web即时下载的将不会被圈件浏用是刚。它学编套互学工久不都维逻直数构过曾结里总经网屏广明果名加载

可以通过 不事时功来这制请例在屏随会和时实于幻近支白名单 使用通配符设置哪些外部资源是可以访问的(仅支持 htt能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标实效使ps),如下

"content_security_policy": "script-src 'self' https://*.xxx.com; object-src 'self'"

本文来源于网络:查看 >
« 上一篇:WebUploader文件图片上传插件的使用
» 下一篇:JQuery文件浏览器插件使用示例
评论
点击刷新
评论
相关博文

分享“案例”中大奖

开始分享 中奖规则
分享链接:
联系方式:
2020-12-03中奖名单(每日10名)
×添加代码片段