Chrome浏览器支持扩展(Extension)开发,来定制扩展现有的功能,如:自动登录,定时刷新,抢票等功能,本文以一个简单的小例子,简述Google Chrome 扩展开发的基本步骤,仅供学习分享使用。
Chrome扩展使用HTML、JavaScript、CSS和图片等Web技术开发,用以增强Chrome浏览器功能的一种程序。Chrome扩展并不是插件,扩展无需了解浏览器的源代码,只需要Web相关开发技术即可,而插件是更底层的浏览器功能扩展,需要深入掌握浏览器的源代码。
Chrome扩展,至少包括一个manifest.json和一个js文件
Chrome扩展,通常还可以包括图标、页面和CSS等资源
作为一个Google Chrome扩展,上述所有文件应该都位于一个根目录之下,各个不同类型的文件可以位于不同的子目录下。
Chrome扩展作为浏览器的一部分而存在,运行无需依赖任何Web服务器。通过Chrome 浏览器打开chrome://extensions页面可以查看当前Chrome 浏览器部署的全部扩展,或者通过Chrome 浏览器的“ ->更多工具->扩展程序”打开。
开启【开发者模式】,然后【加载已解压的扩展程序】即可进行运行调试程序,如果修改了程序,可以点击【重新加载】更新程序。chrome://extensions页面如下:
本例主要是监控某网站某件商品是否存在且是否有货,如果存在,则加入购物车 。Chrome扩展加载后,就会在浏览器地址栏右边,显示图标,单击显示popup页面,如下所示:
Chrome浏览器扩展还有配置选项页面,用于扩展说明,配置相关信息等,通过右键图标按钮-->选项打开对应页面,或者在扩展详细信息-->扩展程序选项进行打开,如下所示:
本例主要核心文件有manifest.json,如下所示:
{
"manifest_version": 2,
"name": "iSmoking",
"version": "1.0.0",
"description": "iSmoking监控程序",
"icons":
{
"16": "img/smoking.png",
"48":"img/smoking.png",
"128": "img/smoking.png"
},
"background":
{
"scripts": ["js/jquery-3.5.1.min.js","js/background.js"]
},
"browser_action":
{
"default_icon": "img/smoking.png",
"default_title": "iSmoking监控程序",
"default_popup": "popup.html"
},
"content_scripts":
[
{
"matches": ["https://www.smokingpipes.com/*"],
"js": ["js/jquery-3.5.1.min.js", "js/content.js"],
"run_at": "document_end",
"all_frames":true
}
],
"permissions":
[
"contextMenus",
"tabs",
"notifications",
"webRequest",
"webRequestBlocking",
"storage",
"https://www.smokingpipes.com/*"
],
"options_ui":
{
"page": "options.html",
"chrome_style": true
}
}
其中browser_action 用于配置适用于整个浏览器对象的功能,如果只针对某一个页面生效,可以使用page_action , 且二者不可以并存。
Popup页面即点击图标弹出的对应的页面,可以引用JS进行业务处理,也可以和Background(后台一直存在的程序)或者 ContentScript(用户操作Dom)进行通信。
iSmoking监控
iSmoking监控
当前用户名:
当前商品Id:
监控数量:
Popup和Content进行通信,
$(function () {
var keys = ["ismoking_username", "ismoking_password", "ismoking_itemid","ismoking_count","ismoking_status"];
//从storage中获取之前保存的内容
$("#username").val(localStorage.getItem(keys[0]));
$("#password").val(localStorage.getItem(keys[1]));
$("#itemid").val(localStorage.getItem(keys[2]));
$("#count").val(localStorage.getItem(keys[3]));
$("#start").click(function () {
var key_msg={"ismoking_username":localStorage.getItem(keys[0]), "ismoking_password":localStorage.getItem(keys[1]),"ismoking_itemid":localStorage.getItem(keys[2]),"ismoking_count":localStorage.getItem(keys[3]),"ismoking_status":"begin"};
console.log(JSON.stringify(key_msg));
sendMessageToContentScript(key_msg,function(msg){
console.log("收到成功"+msg);
});
});
$("#stop").click(function () {
var key_msg={"ismoking_username":localStorage.getItem(keys[0]), "ismoking_password":localStorage.getItem(keys[1]),"ismoking_itemid":localStorage.getItem(keys[2]),"ismoking_count":localStorage.getItem(keys[3]),"ismoking_status":"stop"};
console.log(JSON.stringify(key_msg));
sendMessageToContentScript(key_msg,function(msg){
console.log("收到成功"+msg);
});
});
});
// 获取当前选项卡ID
function getCurrentTabId(callback)
{
chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
{
if(callback) callback(tabs.length ? tabs[0].id: null);
});
}
// 向content-script主动发送消息
function sendMessageToContentScript(message, callback)
{
getCurrentTabId((tabId) =>
{
chrome.tabs.sendMessage(tabId, message, function(response)
{
if(callback) callback(response);
});
});
}
然后通过ContentScript监听信息,如下所示:
// 接收来自后台的消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
{
console.log('收到来自 ' + (sender.tab ? "content-script(" + sender.tab.url + ")" : "popup或者background") + ' 的消息:', request);
for (const key in request) {
if (request.hasOwnProperty(key)) {
const element = request[key];
localStorage.setItem(key,element);
}
}
// tip(JSON.stringify(request));
sendResponse('我收到你的消息了:'+JSON.stringify(request));
var status = request[keys[4]];
if(status=="begin"){
doing1();
}
});
提示:功能实现和前两篇博客基本一样,只是实现方式略有差异。关于Chrome扩展的开发文档,可以参考链接 或者 扩展开发极客博客
人不轻狂枉少年,一首宋词放松一下:
鹧鸪天·西都作
【宋】朱敦儒
我是清都山水郎,天教分付与疏狂。
曾批给雨支风券,累上留云借月章。
诗万首,酒千觞。几曾着眼看侯王?
玉楼金阙慵归去,且插梅花醉洛阳。