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. 引用 自动化测试基础篇--Selenium简介

    原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...

  2. Git初级

    一,安装git 一键安装 Mac 或 Windows. 二,下载一个工具书 Git 命令手册 free Git cheat sheet 三,安装完成之后需要先配置两个基本配置:用户名和邮箱 $ git ...

  3. 1.Linux命令

    所有文章都只做学习记录用! 一.Linux开发板操作命令 1.查看命令:  系统相关:           **任务管理器: gnome-system-monitor 查看系统版 :uname -a ...

  4. vuex状态管理2

    在vuex的官网https://vuex.vuejs.org中,提到的核心概念一共有5个,分别是State.Getter.Mutation.Action和Module,在上一篇随笔中,我们主要用到其中 ...

  5. python接口自动化20-requests获取响应时间(elapsed)与超时(timeout) ok试了 获取响应时间的

    前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于request ...

  6. python 数组 变成 字典的方法

    1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','ke ...

  7. 用sqoop将mysql的数据导入到hive表

    一.先将mysql一张表的数据用sqoop导入到hdfs 1.1.先在mysql中准备一张测试用的表 mysql> desc user_info; +-----------+---------- ...

  8. ssh连接docker容器

    有两种方法: 1.通过宿主机的端口映射访问docker 在宿主机上启动容器,分配端口,启用ssh服务: docker run -p 10022:22 -d sshd:ubuntu /usr/sbin/ ...

  9. Node.js 搭建HTTP服务器,提供文件下载

    直接上代码,这是第一版,可以判断扩展名 var http = require('http'); var express = require('express'); var fs=require(&qu ...

  10. mysql 意向锁的作用

    直接copy知乎上的内容 https://www.zhihu.com/question/51513268 作者:尹发条地精链接:https://www.zhihu.com/question/51513 ...