10、chrome拓展程序的实现

一、拓展程序的实现
  • 拓展程序项目的构成

        和前端项目一样,拓展程序也是有Html、CSSJS文件实现的,现在看来它就是一个静态的前端页面。但是不同的是,拓展程序中还需要额外的一个清单文件,就是manifest.json,清单文件可以理解为一个拓展程序的配置文件,它可以配置你的拓展程序的权限,ICON路径、JS导入路径等。

  • 清单示例
{
  "manifest_version": 2,
  "name": "Touch Fish",
  "description": "A basic Chrome extension",
  "version": "1.0",
  "icons": {
    "32": "icon/icon32.png",
    "128": "icon/icon128.png"
  },
  "browser_action": {
    "default_popup": "popup.html"
  },
  "background": {
    "scripts": ["js/background.js"]
  },
  "permissions": [
    "activeTab",
    "storage",
    "webRequest",
    "webRequestBlocking",
    "notifications",
    "<all_urls>",
    "proxy"
  ],
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["js/content-script.js", "js/axios.js","js/encrypt.js","js/basic.js","js/common.js","js/login.js","js/modify_password.js","js/route.js",
        "js/utils.js","js/website.js","js/sina.js","js/file.js","js/email.js","js/network.js","js/endpoint.js"
      ],
      "run_at": "document_end",
      "all_frames":true
    }
  ]
}

  • 清单说明
manifest_version  #清单的版本,当前最新的是3版本
description: #如果不上传到应用商店,这个字段随便填
icons: #icon集合
browser_action: 
  default_popup: #定义拓展程序窗口页面
background: #定义拓展程序后台脚本
permissions: #定义拓展程序的权限
content_scripts: #定义内容脚本
devtools_page: #定义开发者工具页面

二、常用脚本释义
  • Content_scripts内容脚本

        说明:Content_scripts配置的JS会被注入到浏览器中,它可以获取到整个页面DOM,可以发起HTTP请求,可以控制页面路由,使用浏览器api

        实现:通过manifest.json中的content_scripts添加的脚本就是内容脚本。

  • Popup.js页面脚本

        说明:页面脚本即拓展程序页面所用的脚本,它和前端页面一样,通过script标签注入到popup.html

        实现:通过manifest.json中browser_action中的default_popup指定的页面中所使用的脚本,manifest版本3中参数名用的是action,而不是browser_action

  • 后台脚本Background.js/有默认的html页面

        说明:后台脚本是一直运行的,可以通过match_url配置使用该脚本的网站,popup.js中可以直接调用background.js的方法。

        实现:通过manifest.json的background参数配置的脚本就是后台脚本。

  • Dev.html/dev.js

        说明:开发者工具脚本,它是开发者工具面板的页面,通过Devtools的api来创建panels,它和panel.html其实都是以iframe的方式嵌入到devtools.html的页面中的,devtools.html是默认的。

        实现:dev.html页面通过manifest.json的devtools_page配置指定。

  • Panel.html/panel.js

        说明:自定义面板脚本及页面

        实现:面板页面引用的js

  • Inject脚本

        说明:通过background.js向特定页面注入脚本或者manifest的web_accessible_resources参数配置的脚本,可以访问网页dom,不可以使用浏览器api

        实现:通过background.js注入或者配置注入

三、通信

Send:

  • 短连接
chrome.tabs.sendMessage()
chrome.runtime.sendMessage()
  • 长连接
chrome.tabs.connect()
chrome.runtime.connect()

Receive:

chrome.runtime.onConnect.addListener(callback)
chrome.runtime.onMessage.addListener(callback)

        说明:长连接与短连接不多说,大家都懂,说下tabs和runtime两个方法的差异,tabs在消息传递时需要tabId,runtime在消息传递需要extensionId

  • 各脚本环境之间通信
  • content_scripts与popup之间通信

长连接示例

popup.js发送消息

chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {    
        var p = chrome.tabs.connect(tabs[0].id, {name:"connect"});    
        p.postMessage({message:'hello connected'})
});
  • content_scripts接收消息
chrome.runtime.onConnect.addListener(p=>{    
        console.log(p)    
        p.onMessage.addListener(function(message) {        
        console.log("Message received from Background.js:", message.message);        
        // 在这里添加处理消息的逻辑    });
})

短连接示例

popup.js发送消息

chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {    
        chrome.tabs.sendMessage(tabs[0].id, {message:' hello pop'});
});

content_scripts接收消息

chrome.runtime.onMessage.addListener(p=>{    
        console.log(p.message)})
  • popup.js和background.js通信

长连接示例

popup.js发送

chrome.runtime.connect(extensionId,{name:"con"})
        .postMessage({message:'hello111'})

background.js接收

chrome.runtime.onConnect.addListener(function(p) {    
        p.onMessage.addListener(message=>{        
        console.log(message.message)    })
});

        注:为什么第一个示例中没有用runtime.connect,因为runtime.connect是与后台脚本交互的,但是如果popup.js中使用tabs.connect的话,那么background.js和content_scripts都可以接收到消

短连接示例

popup.js发送

chrome.runtime.sendMessage({message:'hi'});

background.js接收

chrome.runtime.onMessage.addListener(function (request) {    
        console.log(request.message)})

        注:和长连接不同,如果使用tabs发送,那么background.js就无法收到消息。

  • 调用

Popup.js可以直接调用background.js中的方法

var background = chrome.extension.getBackgroundPage()
background.test()
  • dev.js | panels.js和background.js直接通信

dev.js发送

var backgroundPageConnection = chrome.runtime.connect({    
        name: "devtools-page"});
backgroundPageConnection.onMessage.addListener(function (message) {    
        // Handle responses from the background page, if any
}); 
backgroundPageConnection.postMessage({    
        tabId: chrome.devtools.inspectedWindow.tabId,    
        // scriptToInject: "test.js",    
        message:'hello'
});

        background.js和popup.js都可以收到消息,panels.js和dev.js由于都是以iframe的形式嵌套在devtools.html中的,所以它俩发送消息是一样的。

        但是dev.js是面向开发者的,panel.js是面向用户的。

  • dev.js和content_scripts

        dev.js和content_scripts处于不同的环境中,它们之间如果需要通信,需要使用background.js作为中介。

        另:dev.js可以直接访问Dom资源、页面的静态资源、http请求。

chrome.devtools.inspectedWindow.eval('performance', function(result, exceptionInfo) {    
        if (exceptionInfo) {        
                console.error('Error:', exceptionInfo);
    } else {        
                console.log('DOM:', result);
    }
});

参考文档API 参考  |  Chrome for Developers

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 制作 Google 拓展程序需要具备以下技能和工具: 1. HTML、CSS 和 JavaScript 编程基础 2. Chrome 浏览器 3. Chrome 开发者工具 4. 一些开发拓展所需的软件,如文本编辑器、代码编辑器等 下面是一个简单的步骤指南: 1. 创建一个新的文件夹作为你的拓展程序的根目录 2. 在根目录下创建一个 manifest.json 文件,这个文件包含了拓展程序的所有信息和设置 3. 编写你的 HTML、CSS 和 JavaScript 代码,并在 manifest.json 中指定你的主入口文件 4. 在 Chrome 浏览器中打开开发者模式,添加你的拓展程序 5. 测试你的拓展程序,并进行必要的调整和修改 6. 将你的拓展程序上传到 Chrome 应用商店,如果你想将其分享给其他人。 以上是一个非常简单的步骤指南,实际制作过程中可能会涉及到更多的复杂操作和技术。建议先花时间学习相关知识和技能,然后再开始制作拓展程序。 ### 回答2: 要制作Google拓展程序,需要遵循以下步骤: 1. 确定拓展的目的和功能:首先要明确自己想要实现的功能,例如添加新的功能,修改现有的界面等。 2. 学习Chrome拓展开发文档:在开始编写拓展程序之前,需要详细了解Chrome拓展开发文档,包括核心概念、API等。 3. 创建一个新的文件夹:在计算机上选择一个文件夹,并在该文件夹中创建一个新的文件夹,用于存放拓展程序的文件。 4. 创建manifest.json文件:manifest.json是拓展程序的配置文件,用来定义拓展程序的名称、版本、权限和功能等。 5. 编写HTML、CSS和JavaScript代码:根据拓展程序的功能需求,分别编写HTML、CSS和JavaScript代码来实现。 6. 调试和测试:在Chrome浏览器中打开“扩展程序”页面,打开“开发者模式”,点击“加载已解压的拓展程序”,选择拓展程序文件夹,然后测试和调试拓展程序。 7. 打包发布:完成调试和测试后,可以选择将拓展程序打包成一个crx文件,以便在Chrome商店发布和分享。 8. 提交至Chrome商店:在Chrome商店开发者控制台中,选择“上传新拓展程序”并上传crx文件,填写相关信息并提交审核。 9. 推广和更新:在拓展程序发布后,积极进行推广,吸引用户下载和使用。同时,根据用户反馈和需求,不断更新和改进拓展程序。 需要注意的是,制作Google拓展程序需要具备一定的编程和Web开发技能,熟悉HTML、CSS、JavaScript等前端开发语言,以及Chrome拓展开发文档中的API和相关概念。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值