当前位置:   article > 正文

谷歌、火狐浏览器扩展开发_火狐浏览器插件开发

火狐浏览器插件开发

一、组成部分

 开发浏览器扩展最重要的是manifest.json文件,需要在文件中定义一系列关系。

来看看manifest.json文件5大组成部分

1、标题名称、版本号等,其中manifest_version必须配2

2、browser_action

    可以定义扩展图标和点击图标弹出页面

3、content_scripts

    内容脚本,嵌入到浏览器页面。可以引入js、css文件,及加载时机。该内容定义js可以监听到后台发送的消息进行交互,同时也可以主动发送消息。

4、background

    类似后台,发送消息(可以找消息驱动了解)。

5、permissions

    权限定义

  1. {
  2. "name": "浏览器扩展测试例子", // 扩展的名称
  3. "manifest_version": 2,
  4. "version": "1.0.0", //扩展的版本
  5. "description": "浏览器扩展测试例子", //扩展的描述
  6. //图标
  7. "browser_action": { //制定扩展的图标放在Chrome的工具栏中
  8. "default_icon": "img/title.png" , // 图标文件的位置
  9. "default_title": "浏览器扩展测试例子",//当鼠标悬停于扩展图标上所显示的文字
  10. "default_popup": "title.html" // 用户单击扩展图标时所显示页面的文件位置
  11. },
  12. //内容
  13. "content_scripts": [ //需要直接注入页面的JS,content-scripts和原始页面共享DOM,但是不共享JS
  14. {
  15. "matches": ["<all_urls>"], //表示匹配所有地址。抓取特定网页的数据,只需要写该网站即可
  16. //多个JS按顺序注入
  17. "match_about_blank": true,
  18. "js": ["js/jquery/jquery-3.5.1.min.js",//jquery
  19. "js/self/content-script.js" , //content_scripts的主要逻辑内容
  20. "js/self/common.js"//业务逻辑
  21. ],
  22. "css":[],
  23. "run_at":"document_start", // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一 个表示页面空闲时,默认document_idle
  24. "all_frames":false //定义的脚本是否会注入到嵌入式框架中
  25. }
  26. ],
  27. //后台
  28. "background":{
  29. //"page":"background.html"
  30. "scripts": ["js/self/background.js"],
  31. "persistent":true
  32. },
  33. //权限
  34. "permissions":[
  35. "activeTab",
  36. "contextMenus", // 右键菜单
  37. "tabs", // 标签
  38. "<all_urls>",
  39. "webRequest", // web请求
  40. "webRequestBlocking",
  41. //"storage",// 插件本地存储
  42. "http://*/*", // 可以通过executeScript或者insertCSS访问的网站
  43. "https://*/*" // 可以通过executeScript或者insertCSS访问的网站
  44. ]
  45. }

二、测试步骤

1.首先在后台backgroud定义(右键菜单、消息监听)


 1)测试创建右键菜单,创建菜单之后,在浏览器添加扩展后,打开新页面,鼠标右键可以明显看到你注册到的按钮

  1. //type 类型,可选:["normal", "checkbox", "radio", "separator"],默认 normal
  2. //title 显示的文字,除非为“separator”类型否则此参数必需,如果类型为“selection”,可以使用%s显示选定的文本
  3. //contexts 上下文环境,可选:["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio"],默认page
  4. //
  5. chrome.contextMenus.create({
  6. id:'smq',
  7. type: 'normal',
  8. title: '测试右键按钮(ALT+W)',
  9. contexts: ['all'],
  10. onclick: function(params){
  11. //点击事件
  12. sendMessage({rightSmq:true });
  13. //为了兼容其他浏览器不使用getSelected、sendRequest
  14. /*chrome.tabs.getSelected(null , function(tab){
  15. chrome.tabs.sendRequest(tab.id, {rightSmq: true});
  16. }); */
  17. }
  18. });

2)消息监听,这里消息,可以监听到content_scripts和browser_action发来的消息

  1. chrome.runtime.onMessage.addListener(function(res, sender, sendResponse){
  2. console.log(res);
  3. //来自alt + s快捷的事件
  4. if (res.listenerAlt83){
  5. sendMessage("快捷键 alt + s触发的");
  6. }
  7. sendResponse();
  8. return true;
  9. });

3)后台发送消息方式(由content_scripts定义消息监听)

  1. //发送消息
  2. function sendMessage(paramObject){
  3. chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
  4. chrome.tabs.sendMessage((tabs.length ? tabs[0].id : null) , paramObject , function(response){
  5. });
  6. });
  7. }

2.browser_action

1)title定义,简单的在页面上添加一个按钮,注意点:title页面不能写内嵌脚本,只能引用脚本。

title.js

  1. $(function(){
  2. //获取后台对象, title可以获取到后台对象操作消息
  3. var backGroundObject = chrome.extension.getBackgroundPage();
  4. $("#testButton").click(function(){
  5. //这个消息最终在content-script
  6. backGroundObject.sendMessage({test:"hhahahah"});
  7. });
  8. });

过程: 按钮点击发送消息(backGroundObject.sendMessage({test:"hhahahah"});,被content-script 中的chrome.runtime.onMessage.addListener监听到打印消息{test:"hhahahah"}。 另外,这个过程你会发现在title中console.log、alter是无效的。

3.content-script

  1. //接收background/popup传来的消息
  2. chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
  3. console.log(request);
  4. sendResponse();
  5. return true;
  6. });
  7. //监听页面键盘
  8. $(document).keydown(function(e){
  9. var keycode = e.keyCode || e.which;
  10. //监听alt + s
  11. if (e.altKey && keycode == 83){
  12. chrome.runtime.sendMessage({listenerAlt83:true}, function(response){});
  13. }
  14. });

简单的监听接收后台发送的消息,同时在这个js可以添加事件监听,这里我注册了alt + s 监听,当你按照快捷时候,浏览器控制台输出“快捷键 alt + s触发的”,当然也可以通过浏览的注册监听。其实这个js就是被嵌套在页面的js,可以访问得到页面的dom结构(backgroud、browser_action是不可以操作dom的)。

到此,backgroud、browser_action、content_scripts之间交互已经完毕。

4.浏览器添加扩展,以谷歌为例(火狐有点特别)

在浏览器找到更多工具 -> 扩展程序 选择你开发扩展的目录,添加之后右上角就会出现图标了,打开新页面测试扩展功能,在此页面石触发不了的

总结

1、消息机制

    在浏览器扩展中,很明显想要各模块调用其它模块方法需要通过消息传递触发。

2、content_scripts与browser_action、backgroud不同

    通过观察会发现content_scripts会被添加到页面上,可以顺利访问页面元素。但是在browser_action、backgroud是做不到的

其它

1、浏览器扩展还可以添加系统消息,有兴趣可以了解怎么把消息发送到系统桌面。

2、谷歌和狐火扩展开发过程差不多,但是有内置函数的区别,如果想要兼容,就找一些共同的公函,但是它们有各自api

3、我的一个二维码识别插件GitHub - sakyoka/QrCodeDemo: 二维码识别浏览器扩展

4、本章例子浏览器扩展开发测试例子-Javascript文档类资源-CSDN下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/333004
推荐阅读
相关标签
  

闽ICP备14008679号