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. 错误 Run-time error nnn at xxxx; 错误

      出现runtime error临时解决办法,于注册表位置中找到如下键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Gdiplus,然后把键DisableTIFFCo ...

  2. PHP用ActiveMq 实现消息列队

    1.各种安装 2.简单配置: jetty.xml localhost:8161 配置: activemq添加stomp的61613接口 conf/activemq.xml <transportC ...

  3. Django中的URL映射

    1.为什么回去urls.py文件中寻找映射呢? 因为在settings.py中配置了ROOT_URLCONF为urls.py: ROOT_URLCONF = 'first_project.urls' ...

  4. 什么是词性标注(POS tagging)

    词性标注也叫词类标注,POS tagging是part-of-speech tagging的缩写. 维基百科对POS Tagging的定义: In corpus linguistics, part-o ...

  5. SpringCloud之声明式服务调用 Feign(三)

    一 Feign简介 Feign是一种声明式.模板化的HTTP客户端,也是netflix公司组件.使用feign可以在远程调用另外服务的API,如果调用本地API一样.我们知道,阿里巴巴的doubbo采 ...

  6. extend 与 append 的区别

    >>> A = ['q', 'w', 'e', 'r'] >>> A.extend(['t', 'y']) >>> A ['q', 'w', 'e ...

  7. 微服务之分布式跟踪系统(springboot+pinpoint)

    这篇文章介绍一下在微服务(springboot开发)的项目中使用pintpoint监控的过程及效果展示. 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个AP ...

  8. C语言强化——排序

    1.完成堆排,对比堆排和qsort在排序1亿数的时间差异 #include<stdio.h> #include<time.h> #include<stdlib.h> ...

  9. if判断、while循环、for循环

    一. if判断 基本结构: if 执行语句1 print(代码块1); print(代码块2); # 满足执行语句1时,执行代码块1和代码块2,否则只执行代码块2. if 执行语句1 print(代码 ...

  10. [UE4]创建属性绑定