js:浏览器插件
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:浏览器插件的更多相关文章
- 判断浏览器 插件 jquery.ua.js
判断浏览器 插件 jquery.ua.js /*! * jquery.ua.js * @link https://github.com/cloudcome/jquery.ua * @author yd ...
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...
- atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o
atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing) ...
- chrome浏览器插件启动本地应用程序
chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30| 分类: 浏览器插件|举报|字号 订阅 下载LOFTER我的照片书 | chrome的插件开发这里就 ...
- mac 下基于firebreath 开发多浏览器支持的浏览器插件
mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...
- 用Javascript编写Chrome浏览器插件
原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...
- 浏览器插件-ActiveX
浏览器插件:B/S模式下通过在客户端浏览器安装插件调用外设或者处理特殊格式数据. 常用插件有身份证阅读器.sim卡阅读器.银行卡校验插件.手写板插件.小键盘插件: 处理表格数据的华表插件.图片合成插件 ...
- 在NPAPI开发火狐浏览器插件在NPAPI插件
1.插件是什么 插件是一种遵循一定规范的应用程序接口编写出来的程序.插件必须依附于一个宿主程序,为宿主程序提供增强功能.插件的种类有很多,这里主要讨论浏览器插件. IE下利用OLE和COM技术开发的浏 ...
- knob.js进度插件
关于knob.js进度插件的使用 关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于我的胯下.... 1. 引入 head 部分添加knob.js,同时引 ...
随机推荐
- 代码编辑器之sublime text
http://www.iplaysoft.com/sublimetext.html 1.特点: 中文乱码问题:另外,很多朋友反映表示打开中文会有乱码,其实是因为ST2本身只支持UTF-8编码,而我们常 ...
- 实现类QQ的编辑框
第一步,平面效果.Windows系统有几个消息专门用来处理Windows组件的边框部位,那就是WM_NCCALCSIZE和WM_NCPAINT这两个消息,从消息名字看来NC这个就代表着No Clien ...
- xe5 android tts(Text To Speech) [转]
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转语音的方法 和访问蓝牙一样,这里用javaclass的接口实现 接 ...
- IO流中File文件最常用和直接的用法
一.File (一)概述 1.File: 1)文件和目录(文件夹)路径名的抽象表示形式 2)注意: 可以表示文件夹与文件,即路径与文件 抽象概念,即路径与文件是否存在不确定 2.构造方法 1)Fi ...
- 基于vue.js实现远程请求json的select控件
基本思路 前端把需要的参数类型编码传到后台,后台返回相应的参数列表json,前端利用vue渲染select控件 具体实现 前端代码 <select v-model="template. ...
- Android keystore相关
一.生成keystorekeytool -genkey -alias test.keystore -keyalg RSA -validity -keystore test.keystore 二.查看 ...
- SSH的配置文件
Hibernate: xxx.hbm.xml ,作用:类的属性和表的列建立映射关系,主键策略,多表查询等 hibernate.cfg.xml ,核心配置文件,数据库配置信息,加载xxx.hbm.x ...
- linux一些基本知识
一.linux i386是32位的,amd64是64位(一般情况不限intel或者amd) server是服务器版,desktop是桌面版 Desktop是社区开源版,拥有一些新功能新软件 ...
- for循环计算li的个数
今天有一段代码 在ie6下面显示 我检查了一下代码,发现每for循环一次,就会重新计算li的个数,会拖慢运行速度,所以改成以下代码,ie6就正常了
- 面向对象的轮播js
1.自执行函数的前后要加分号 案例: ;(function(){})(); 2.面向对象的最大优势节省了许多内存 正式开写面向对象的轮播: <!DOCTYPE html> <html ...