chrome扩展开发介绍和右键开发
chrome扩展开发
chrome扩展中文文档官网
Chrome浏览器在全球都拥有可观的忠实用户,抛去其占据了浏览器市场的霸主地位不说,其具备了众多的优点,如良好的用户体验,简单的开发规范等等。
归纳为以下几点:
- 市场占有率高,用户基础庞大;
- 开发流程简单,方便快速上手;
- 应用场景广泛,兼容webkit内核(360极速浏览器、360安全浏览器、搜狗浏览器、QQ浏览器等等);
- 可扩展性强,非weikit内核的浏览器也有一定的支持(如Firefox)
初试插件
- 首先创建一个文件夹,用于存储插件相关资源文件
- 创建对应需要的目录和manifest.json
manifest.json文件配置
这是一个简单的配置,并非完整配置,特别注意下,manifest.json文件中不能包含注释!否则浏览器无法正常解析。
{// 必须的字段// 清单文件的版本,这个必须写,而且必须是2"manifest_version": 2,// 插件的名称"name": "SN-七七","version": "1.0",// 建议提供的字段// 插件描述"description": "这是chrome插件的描述信息",// 图标,一般偷懒全部用一个尺寸的也没问题"icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},// 多选一,或者都不提供// 浏览器右上角图标设置,browser_action、page_action、app必须三选一"browser_action": {"default_icon": "img/icon.png",// 图标悬停时的标题,提示信息"default_title": "这是一个示例Chrome插件","default_popup": "popup.html"},// 根据需要提供// 权限申请"permissions": ["contextMenus", // 右键菜单"tabs", // 标签"notifications", // 通知"webRequest", // web请求"webRequestBlocking","storage", // 插件本地存储"https://www.baidu.com/",//可以通过executeScript或者insertCSS访问的网站]
}
配置完成后,打开chrome浏览器,选择【管理扩展插件】,打开开发者模式,点击【加载已解压的扩展程序】,选择刚刚创建的目录,即可看到插件加载成功!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1iYX2Y5-1608169290780)(https://s1.ax1x.com/2020/11/04/B6v2a8.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FlNkMvs-1608169290783)(https://s1.ax1x.com/2020/11/04/B6xqOI.png)]
浏览器右上角也会显示插件的图标。
在开发应用(扩展)时,需要把这些文件都放到同一个目录下。发布应用(扩展)时,这个目录全部打包到一个应用(扩展)名是
.crx
的压缩文件中。如果使用谷歌浏览器应用开放平台或Chrome Developer Dashboard上传应用(扩展),可以自动生成.crx
文件。
接下来看一下完整配置
manifest.json
查看官网配置
{// 必须的字段// 清单文件的版本,这个必须写,而且必须是2"manifest_version": 2,// 插件的名称"name": "SN-schcb","version": "1.0",// 建议提供的字段// 插件描述"description": "这是chrome插件的描述信息",// 图标,一般偷懒全部用一个尺寸的也没问题"icons":{"16": "img/icon.png","48": "img/icon.png","128": "img/icon.png"},// 多选一,或者都不提供// 浏览器右上角图标设置,browser_action、page_action、app必须三选一"browser_action": {"default_icon": "img/icon.png",// 图标悬停时的标题,提示信息"default_title": "这是一个示例Chrome插件","default_popup": "popup.html"},// 根据需要提供// 权限申请"permissions": ["contextMenus", // 右键菜单"tabs", // 标签"notifications", // 通知"webRequest", // web请求"webRequestBlocking","storage", // 插件本地存储"https://www.baidu.com/",//可以通过executeScript或者insertCSS访问的网站],// 会一直常驻的后台JS或后台页面"background":{// 2种指定方式,如果指定JS,那么会自动生成一个背景页//"scripts": ["js/background.js"]"page": "background.html"},// 需要直接注入页面的JS"content_scripts": [{//"matches": ["http://*/*", "https://*/*"],// "<all_urls>" 表示匹配所有地址"matches": ["<all_urls>"],// 多个JS按顺序注入"js": ["js/jquery-1.8.3.js", "js/content-script.js"],// JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式"css": ["css/custom.css"],// 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle"run_at": "document_start"},// 这里仅仅是为了演示content-script可以配置多个规则{"matches": ["*://*/*.png", "*://*/*.jpg", "*://*/*.gif", "*://*/*.bmp"],"js": ["js/show-image-content-size.js"]}],// 权限申请"permissions":["contextMenus", // 右键菜单"tabs", // 标签"notifications", // 通知"webRequest", // web请求"webRequestBlocking","storage", // 插件本地存储"http://*/*", // 可以通过executeScript或者insertCSS访问的网站"https://*/*" // 可以通过executeScript或者insertCSS访问的网站],// 普通页面能够直接访问的插件资源列表,如果不设置是无法直接访问的"web_accessible_resources": ["js/inject.js"],// 插件主页,这个很重要,不要浪费了这个免费广告位"homepage_url": "https://www.baidu.com",// 覆盖浏览器默认页面"chrome_url_overrides":{// 覆盖浏览器默认的新标签页"newtab": "newtab.html"},// Chrome40以前的插件配置页写法"options_page": "options.html",// Chrome40以后的插件配置页写法,如果2个都写,新版Chrome只认后面这一个"options_ui":{"page": "options.html",// 添加一些默认的样式,推荐使用"chrome_style": true},// 向地址栏注册一个关键字以提供搜索建议,只能设置一个关键字"omnibox": { "keyword" : "go" },// 默认语言"default_locale": "zh_CN",// devtools页面入口,注意只能指向一个HTML文件,不能是JS文件"devtools_page": "devtools.html"
}
参数-browser_action
browser_action 指定扩展的图标放在 Chrome 工具栏中,它定义了扩展图标文件位置(default_icon)、悬浮提示(default_title)和点击扩展图标所显示的页面位置(default_popup)。
// 浏览器右上角图标设置,browser_action、page_action、app必须三选一"browser_action": {"default_icon": "img/icon.png",// 图标悬停时的标题,提示信息"default_title": "你好,我是暴躁的小七七,你可不要碰我啊!","default_popup": "popup.html"},
展示效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcsZemGH-1608169290787)(https://s1.ax1x.com/2020/11/04/BgGRpT.png)]
popup.html就是单纯的html文件,点击小图标即可看到popup中的内容
参数-background
background 可以使扩展常驻后台,比较常用的是指定子属性 scripts,表示在扩展启动时自动创建一个包含所有指定脚本的页面。
// 会一直常驻的后台JS或后台页面"background":{// 2种指定方式,如果指定JS,那么会自动生成一个背景页//"scripts": ["js/background.js"]"page": "background.html"},
参数-chrome_url_overrides
可以自定义的页面替换 Chrome 相应默认的页面,比如新标签页(newtab)、书签页面(bookmarks)和历史记录(history)。
// 覆盖浏览器默认页面"chrome_url_overrides":{// 覆盖浏览器默认的新标签页"newtab": "newtab.html"},
参数-content-scripts
所谓content-scripts,其实就是Chrome插件中向页面注入脚本的一种形式(虽然名为script,其实还可以包括css的),借助content-scripts
我们可以实现通过配置的方式轻松向指定页面注入JS和CSS(如果需要动态注入,可以参考下文),最常见的比如:广告屏蔽、页面CSS定制,等等。
{// 需要直接注入页面的JS"content_scripts": [{//"matches": ["http://*/*", "https://*/*"],// "<all_urls>" 表示匹配所有地址"matches": ["<all_urls>"],// 多个JS按顺序注入"js": ["js/jquery-1.8.3.js", "js/content-script.js"],// JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式"css": ["css/custom.css"],// 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle"run_at": "document_start"}],
}
特别注意,如果没有主动指定run_at
为document_start
(默认为document_idle
),下面这种代码是不会生效的:
document.addEventListener('DOMContentLoaded', function()
{console.log('我被执行了!');
});
content-scripts
和原始页面共享DOM,但是不共享JS,如要访问页面JS(例如某个JS变量),只能通过injected js
来实现。
参数-homepage_url
// 插件主页,这个很重要,不要浪费了这个免费广告位"homepage_url": "https://www.baidu.com",
参数-options_page
定义了扩展的设置页面,配置后在扩展图标点击右键可以看到 选项,点击即打开指定页面
// Chrome40以后的插件配置页写法"options_ui":{"page": "options.html",// 添加一些默认的样式,推荐使用"chrome_style": true},
参数-permissions
属性是一个数组,它定义了扩展需要向 Chrome 申请的权限,比如通过 XMLHttpRequest 跨域请求数据、访问浏览器选项卡(tabs)、获取当前活动选项卡(activeTab)、浏览器通知(notifications)、存储(storage)等,可以根据需要添加。。
// 权限申请"permissions": ["contextMenus", // 右键菜单"tabs", // 标签"notifications", // 通知"webRequest", // web请求"webRequestBlocking","storage", // 插件本地存储"https://www.baidu.com/",//可以通过executeScript或者insertCSS访问的网站],
功能形式
右键菜单
通过开发Chrome插件可以自定义浏览器的右键菜单,主要是通过chrome.contextMenus
API实现,右键菜单可以出现在不同的上下文,比如普通页面、选中的文字、图片、链接,等等,如果有同一个插件里面定义了多个菜单,Chrome会自动组合放到以插件名字命名的二级菜单里,如下:
background.js文件:
chrome.contextMenus.create({type: 'normal', // 类型,可选:["normal", "checkbox", "radio", "separator"],默认 normaltitle: '菜单的名字', // 显示的文字,除非为“separator”类型否则此参数必需,如果类型为“selection”,可以使用%s显示选定的文本contexts: ['page'], // 上下文环境,可选:["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio"],默认pageonclick: function(){}, // 单击时触发的方法parentId: 1, // 右键菜单项的父菜单项ID。指定父菜单项将会使此菜单项成为父菜单项的子菜单documentUrlPatterns: 'https://*.baidu.com/*' // 只在某些页面显示此右键菜单
});
// 删除某一个菜单项
chrome.contextMenus.remove(menuItemId);
// 删除所有自定义右键菜单
chrome.contextMenus.removeAll();
// 更新某一个菜单项
chrome.contextMenus.update(menuItemId, updateProperties);
- 定义多个菜单形式
chrome.contextMenus.create({title: '父菜单1', // %s表示选中的文字id: '0',contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单
});
chrome.contextMenus.create({title: '父菜单2', // %s表示选中的文字id: '1',contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单});
chrome.contextMenus.create({title: '子菜单1:%s', // %s表示选中的文字contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单parentId: '0',onclick: function(params){// 注意不能使用location.href,因为location是属于background的window对象chrome.tabs.create({url: `https://www.baidu.com/s?wd=${encodeURI(params.selectionText)}&ie=UTF-8`});}
});
chrome.contextMenus.create({title: '子菜单2:%s', // %s表示选中的文字contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单parentId: '0',onclick: function(params){// 注意不能使用location.href,因为location是属于background的window对象chrome.tabs.create({url: `https://www.baidu.com/s?wd=${encodeURI(params.selectionText)}&ie=UTF-8`});}
});
chrome.contextMenus.create({title: '子菜单1:%s', // %s表示选中的文字contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单parentId: '1',onclick: function(params){// 注意不能使用location.href,因为location是属于background的window对象chrome.tabs.create({url: `https://www.baidu.com/s?wd=${encodeURI(params.selectionText)}&ie=UTF-8`});}
});
效果如下:
chrome扩展开发介绍和右键开发相关推荐
- chrome扩展程序开发
首先,明确两个概念的区别:chrome扩展程序和Web Apps.具体参考:http://www.chromi.org/archives/10106 本文只讨论chrome扩展程序. 最好的开发教程莫 ...
- 关于Android模块化开发介绍及使用
模块化浅谈: 1.安卓模块化开发介绍: 模块化开发思路就是:单独开发每个模块,用集成的方式把他们组合起来,就能拼出一个app.app可以理解成很多功能模块的组合,而且有些功能模块是通用的,必备的,像自 ...
- 记录一个 Chrome 扩展的开发过程
chrome-extension-smms 是基于 smms 实现的一个 chrome 图床扩展. 其实很早之前就想学习 Chrome 扩展开发 了,只是一直没有抽出时间,一直瞎忙.今天刚好闲下来了而 ...
- React开发chrome插件系列教程之chrome插件基本介绍
文章目录 chrome插件能干什么 chrome插件的版本 chrome插件的浏览器支持 chrome插件的功能组成 manifest.json popup content script backgr ...
- Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲
Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲 Chrome插件的文件结构 Hello_World编写 利用JavaScript实现Hello Everything 灵活运用浏览器的存 ...
- activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...
作者 | Chidume Nnamdi 译者 | 王强 策划 | 李俊辰 "进步不是勤奋者的功劳.它是懒惰者在尝试寻找更简单的方法时取得的成果." --罗伯特·海因莱因 CSSV ...
- 推荐一个有趣的Chrome扩展程序-查看任意网站的开发技术栈
对于前端开发人员来说,目前的前端框架层出不穷,最受欢迎的莫过于所谓的前端框架三驾马车:Angular, React和Vue.在学习的过程中,肯定好奇现在的互联网公司的网站用的何种前端框架来开发的. C ...
- SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- Google Chrome 扩展程序开发
根据公司的规定,每月八小时,弹性工作制.所以大家平时来的不太准时,如果有事,下班也就早些回去了.所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样式显示都是一 ...
最新文章
- C# 线程手册 第五章 扩展多线程应用程序 系列
- kafka在zk中的目录
- 倒出mysql库命令行_mysql命令行导入导出数据库
- skyline TerraBuilder 制作MPT方法与技巧(2)(转自)
- Visual C++——设置光标Cursor
- 微软CEO纳德拉恢弘计划:让开发者始终忘不了微软
- python怎么用split字符串全部分开_请教一下python怎么用split对一句话拆分两次?...
- go error的理解
- 逆水寒斩鸿蒙称号,逆水寒胆大包天称号怎么获得 逆水寒胆大包天称号获得方法一览...
- JDBC插入百万数据,不到5秒!
- LAMP环境安装1之freetype
- 开了一个月yunfile的会员,发现没东西可下,做了个软件分享下
- FPGA:异步FIFO
- win7系统服务器停止,Windows7一个月后停止服务支持 Win7将于明年1月14日终止服务 停止服务后还能使用吗?...
- 【转】为什么火线有电压,零线没有电压呢
- Zebec社区上线ZIP-2(地平线升级行动)提案,海量激励将被释放
- python行星名称输出_用python绘制行星轨道
- 3DMAX软件可以运用到哪些行业?次世代游戏建模怎么样?
- 计算机基础知识(基础入门小白专属)七
- amp;与amp;amp;的区别