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. 黄聪:jquery+Datatables出现数据过长,表格不自动换行,columns设置width失效的办法

    添加下面的CSS代码即可: table.dataTable.nowrap th, table.dataTable.nowrap td{white-space: normal !important;}

  2. Tablacus Explorer双心封装版

    Tablacus Explorer双心封装版 http://cloud.189.cn/t/mYj67j7r2Afq (TablacusExplorer17.3.27双心封装版.exe) http:// ...

  3. SSH加密原理、RSA非对称加密算法学习与理解

    首先声明一下,这里所说的SSH,并不是Java传统的三大框架,而是一种建立在应用层和传输层基础上的安全外壳协议,熟悉Linux的朋友经常使 用到一 个SSH Secure Shell Cilent的工 ...

  4. 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar

    1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...

  5. 禅道在docker上部署与迁移

    一.禅道部署 1.下载地址 禅道开源版:   http://dl.cnezsoft.com/zentao/docker/docker_zentao.zip 数据库用户名: root,默认密码: 123 ...

  6. WireGuard协议介绍

    原文: https://www.jianshu.com/p/32c3e62c2711

  7. SCCM 2012 R2实战系列之三:独立主站点部署

    3.1 SCCM 2012 R2主站点的安装 SCCM 2012 R2跟以前的SCCM 2007不同的是多了一个管理中心站点的角色, 管理中心站点主要负责SCCM管理控制和报表查看. 主站点跟以往的S ...

  8. Oracle SQL:select各类查询语句总结

    SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP  ERP数据库 ...

  9. 数据迁移_把RAC环境备份的数据,恢复到另一台单机Oracle本地文件系统下

    数据迁移_把RAC环境备份的数据,恢复到另一台单机Oracle本地文件系统下 作者:Eric 微信:loveoracle11g 1.创建pfile文件 # su - ora11g # cd $ORAC ...

  10. pandas函数get_dummies的坑

    转载:https://blog.csdn.net/mvpboss1004/article/details/79188190 pandas中的get_dummies得到的one-hot编码数据类型是ui ...