1、chrome

background.js

//chrome.webRequest.onBeforeRequest.addListener(function(info) {
// chrome.tabs.executeScript({code: 'console.log("' + info.url + '")'});
// chrome.tabs.getSelected(null, function(tab) {
// chrome.tabs.sendMessage(tab.id, info.url);
// });
// return;
//},{urls: ["<all_urls>"]}, ["blocking"]); chrome.webRequest.onCompleted.addListener(function(info) {
//chrome.tabs.executeScript({code: 'console.log("' + info.url + '")'});
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, info.url);
});
return;
},{urls: ["<all_urls>"]}); chrome.webRequest.onErrorOccurred.addListener(function(info) {
//chrome.tabs.executeScript({code: 'console.log("' + info.url + '")'});
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, "!" + info.error + "!" + info.url);
});
return;
},{urls: ["<all_urls>"]});

content.js

console.log("content.js");

chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
console.log(msg);
document.body.text += msg + "\n";
});

manifest.json

{
"name": "test",
"version": "1.0",
"description": "Test",
"background": {
"persistent": true,
"scripts": ["background.js"]
},
"content_scripts": [
{
"js": ["content.js"],
"matches": ["http://*/*", "https://*/*"],
"run_at": "document_start"
}
],
"permissions": [
"tabs",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"manifest_version": 2
}

【另外chrom浏览器插件的编写学习见:https://www.cnblogs.com/champagne/p/4848520.html】

2、firefox

background.js

//browser.webRequest.onBeforeRequest.addListener(function(info) {
// browser.tabs.executeScript({code: 'console.log("' + info.url + '")'});
// return;
//},{urls: ["<all_urls>"]}, ["blocking"]); browser.webRequest.onCompleted.addListener(function(info) {
//chrome.tabs.executeScript({code: 'console.log("' + info.url + '")'});
browser.tabs.query({currentWindow: true,active: true}).then(function (tabs){
for (let tab of tabs) {
browser.tabs.sendMessage(tab.id,info.url);
}
});
return;
},{urls: ["<all_urls>"]}); browser.webRequest.onErrorOccurred.addListener(function(info) {
//chrome.tabs.executeScript({code: 'console.log("!' + info.url + '")'});
browser.tabs.query({currentWindow: true,active: true}).then(function (tabs){
for (let tab of tabs) {
browser.tabs.sendMessage(tab.id,"!" + info.error + "!" + info.url);
}
});
return;
},{urls: ["<all_urls>"]});

content.js

//console.log("content.js");

browser.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
console.log(msg);
document.body.text += msg + "\n";
});

manifest.json

{
"manifest_version": 2,
"name": "adtest",
"version": "1.0",
"description": "get urlinfo where access a website",
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"js": ["content.js"],
"matches": ["http://*/*", "https://*/*"],
"run_at": "document_start"
}
],
"permissions": [
"tabs",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"applications": {
"gecko": {
"id": "borderify@example.com"
}
}
}

js:浏览器插件的更多相关文章

  1. 判断浏览器 插件 jquery.ua.js

    判断浏览器 插件 jquery.ua.js /*! * jquery.ua.js * @link https://github.com/cloudcome/jquery.ua * @author yd ...

  2. Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..

    Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...

  3. atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o

    atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing) ...

  4. chrome浏览器插件启动本地应用程序

    chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30|  分类: 浏览器插件|举报|字号 订阅     下载LOFTER我的照片书  |     chrome的插件开发这里就 ...

  5. mac 下基于firebreath 开发多浏览器支持的浏览器插件

    mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...

  6. 用Javascript编写Chrome浏览器插件

    原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...

  7. 浏览器插件-ActiveX

    浏览器插件:B/S模式下通过在客户端浏览器安装插件调用外设或者处理特殊格式数据. 常用插件有身份证阅读器.sim卡阅读器.银行卡校验插件.手写板插件.小键盘插件: 处理表格数据的华表插件.图片合成插件 ...

  8. 在NPAPI开发火狐浏览器插件在NPAPI插件

    1.插件是什么 插件是一种遵循一定规范的应用程序接口编写出来的程序.插件必须依附于一个宿主程序,为宿主程序提供增强功能.插件的种类有很多,这里主要讨论浏览器插件. IE下利用OLE和COM技术开发的浏 ...

  9. knob.js进度插件

    关于knob.js进度插件的使用 关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于我的胯下.... 1.  引入 head  部分添加knob.js,同时引 ...

随机推荐

  1. vue项目中, 字段信息为空时不渲染,是真的不渲染吗

    代码 样式,宽度pro_proj 此class设置有宽度,考虑字数如果太多就进入下一行就没有设置高度 样式改为 数据 渲染. 开始以为,null时vue不渲染,然后审查元素,发现渲染的dom是存在的, ...

  2. PAT 乙级 1051 复数乘法 (15) C++版

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  3. Tomcat Docker容器自动重启问题排查

    1. 问题 前两天发现 APP 刷新数据偶尔出现等半天没有响应的情况,感觉不像 APP 的问题,就查了下服务端的日志. 服务端用的是 Java,部署采用的 Docker 官方的 tomcat 镜像,并 ...

  4. 廖雪峰Java4反射与泛型-3范型-5extends通配符

    1.泛型的继承关系: Pair<Integer>不是Pair<Number>的子类 add()不接受Pair<Integer> Pair.java package ...

  5. AAA及Radius

    一.AAA(Authentication.Authorization.Accounting) 验证.授权和记费 验证 Authentication :验证用户身份 授权 Authorization : ...

  6. [UE4]背景模糊

    被遮挡的都会被模糊,没被遮挡的不会模糊

  7. [UE4]Make Array创建数组,而不是定义数组

    当不想新建一个数组对象的时候,就可以使用“Make Array”创建一个数组

  8. ie-table不显示边框解决办法

    .thisTd {          background-clip: padding-box;           position:relative; } 原来背景也有边界的:决定背景会盖住哪些部 ...

  9. adversarial example研究

    Paper: Practical Black-Box Attacks against Machine Learning 一.介绍 概况:Ian Goodfellow大神研究如何在不知道model内部结 ...

  10. unity3d动态创建一个文本

    2D文本需要Canvas和EventSystem,最好使用Editor来添加: 动态显示一个文本,采用3D Text的方式: GameObject text = new GameObject(); t ...