chrome扩展应用实例
chrome extensions 基本组成,唯一必要的文件就是manifest.json这个应用的配置清单
manifest.json中前三个参数为必要参数,其他的可选:
{
"name ":"your extensions name ",
"version":"1.0.0.1", //扩展应用版本,自定义
"manifest_version":2, //清单文件的版本,现在都应该写2
"icons":{ //图标,暂时也没加载成功
”16“:”imgs/icon.png",
"48":"imgs/icon48.png",
"128":"imgs/icon128.png"
},
"background":{ //扩展的后台页面,持续运行,一般是只需要写js文件就可,如果需要也可写page
//"page":"background.html",
"scripts":["background.js"]
},
"permissions":[ //允许在background,popup内访问的网站,或页面的其他信息权限,如网页上的右键菜单
"http://*/*", //这个表示所有的http网页
“notifications" //通知
],
”browser_action":{ //扩展应用的的三种形式之一,出现在浏览器右上角的图标
"default_icon":"imgs/icon19.png",
"default_title":"my extension",
"default_popup":"popup.html" //点击右上角的图标时出现的页面
},
“content_scripts": // 可以操纵页面的js,但不能调用与被调用 页面中的js变量,方法交互
[{
"js":["jquery-3.3.1.min.js","my_content_script.js"], //js脚本列表,这里把jquery加进去,在其他content_scripts中就可以使用jquery语法了
"css":[],
"matches":["*://*.cnblog.com/*","*://*.tmall.hk/*"], //这些js作用于哪些页面
”run_at":"document_end" //在什么时候执行,这里表示页面加载完成后执行
}],
"web_accessible_resources":["images/*.png","images/*.gif","echarts.js"] //在页面上可以直接访问的资源列表,相当于静态文件
}
这里我主要用到的就是content_scripts和background.
content_scripts可以直接改变页面的元素,增删改,但是权限有限,需要与background通信,交换信息,再改造页面。
background 是一个持续存在与浏览器后台的页面,不可见,可以进行跨站访问,获取数据
popup也与background具有相同的功能,但是只用当用户点击时才被激活,下次被点击时又是初始状态
在 my_content_script.js中,
var echar_src=$("<script type='text/javascript' src="+chrome.extension.getURL('echarts.js')+" </script>");
这里chrome.extension.getURL('echarts.js'), echarts.js在web_accessible_resources中列出了,所以页面可以直接访问该资源
$('#content').append(echar_src)
conten_scripts与background 通讯,这是有问有答的多次通讯,建立一个专用端口,然后在端口上通讯,如果只需发送一次性消息,可用其他简单写法
var port = chrome.runtime.connect({name: "敲门"});
port.postMessage({joke: "敲门"});
console.log('I AM content script, had send message:'+JSON.stringify({joke: "敲门"}));
port.onMessage.addListener(function(msg) {
if (msg.question == "是谁?"){
port.postMessage({answer: "数据",name:c5_name,site:"c5"});
console.log('i answer bkgrd.js for data ');
}
else if (msg.question == "ok")
{
console.log('i got data :'+JSON.stringify(msg.data));
var pricenode=$("#content");
exe_ele=$("<script>var jsdata="+JSON.stringify(msg.data)+"; hotlineLine(jsdata);</script>") ;
pricenode.append(exe_ele);
console.log('i am after the data insert ');
}
});
在background.js中
function httpRequest(url,callback){ //这里定义一个请求方法,url必须是manifest.json的参数permissions中所列出的地址
var xhr=new XMLHttpRequest();
xhr.open("GET",url,true);//初始化一个请求,采用异步
xhr.onreadystatechange=function(){
if (xhr.readyState==4){
callback(xhr.responseText); //XMLHttpRequest.responseText 请求的返回值,类型为string
}
}
//发送数据
xhr.send();
}
chrome.runtime.onConnect.addListener(function(port) { //监听port.name=="敲门"这个端口中消息
console.assert(port.name == "敲门");
port.onMessage.addListener(function(msg) {
if (msg.joke == "敲门")
port.postMessage({question: "是谁?"});
else if (msg.answer == "女士")
port.postMessage({question: "哪位女士?"});
else if (msg.answer=='数据'){
httpRequest(MY_DATA_URL, function(res){
port.postMessage({question:'ok',data:JSON.parse(res)});
});
}
});
});
在 扩展应用的 组建间通讯时,可以认为发送的消息 json形式的对象都是自动转换成string发送出去,收到的消息也是自动右string转换成json对象。但是从外面请求来的数据,需要用JSON.parse()来将其转换成json对象。
chrome扩展应用实例的更多相关文章
- 清除页面广告?身为前端,自己做一款简易的chrome扩展吧
大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- Chrome扩展开发之一——Chrome扩展的文件结构
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- chrome扩展写法
最近看到公司同事经常写chrome扩展,来提高生成效率,回想想自己以前也写过chrome扩展,但是由于不经常写,也没做积累也都忘记了,现在重新回顾一下. 一.chrome扩展基本概念 chrome扩展 ...
- 如何写chrome扩展
转载:http://www.cnblogs.com/pingfan1990/p/4560215.html 最近看到公司同事经常写chrome扩展,来提高生成效率,回想想自己以前也写过chrome扩展, ...
- 自己做一款简易的chrome扩展--清除页面广告
大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...
- Chrome扩展,应用开发学习笔记之2---恶搞百度一下
Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...
- chrome扩展程序开发
首先,明确两个概念的区别:chrome扩展程序和Web Apps.具体参考:http://www.chromi.org/archives/10106 本文只讨论chrome扩展程序. 最好的开发教程莫 ...
- 一起来做chrome扩展《可配置的代理》
一.本文主要涉及相关内容: chrome.proxy pacScript browser_action popup localStroage 二.预览 (代理运行截图,图中的代理服务器有防火墙,暂不对 ...
随机推荐
- Mybatis(二)总结
1. 输入映射(就是映射文件中可以传入哪些参数类型) 1)基本类型 2)pojo类型 3)Vo类型2. 输出映射(返回的结果集可以有哪些类型) 1)基本类型 2)pojo类型 3)List类型3. 动 ...
- vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...
- GoldenGate12.3中新增的Parallel Replicat (PR)介绍
Parallel Replicat介绍 在OGG 12.3.0.1中新增的一项特性parallel replicat(并行投递),相对于传统的投递和集成投递(integrated replicat), ...
- 51Nod 1185 威佐夫游戏 V2
有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...
- 第二次作业-git的基本操作
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 一.修改用户名和邮箱地址: (1)配置用户名命令:$git ...
- 基于PI+QT实现OpenCV图像处理操作(基本环境搭建)
这篇博客就是在PI上直接写出来的!cheers!! PI3的性能已经非常强劲,而作为一个能够独立运行的运算单元,使用它来做图像处理,将是非常适合的.为了挖掘机器的最大潜能,我没有采用比较常见的pyth ...
- JS(JavaScript)的初了解3(更新中···)
1. {} 在JS中我们把它叫代码块.如果代码块里的内容没有执行完,语句不会向下执行. 代码块是一个独立的整体.如果JS中某一条语句出错,那么就会在此终止不会向下执行. 2. 循环语句 循环,就是对一 ...
- 配置SAP GUI FOR HTML(通过WEB方式登录)
配置SAP GUI FOR HTML(通过WEB方式登录) SAP系统可以通过安装 SAP GUI.SAP GUI FOR JAVA.SAP GUI WEB FOR JAVA.SAP GUI FOR ...
- hdu 4277 USACO ORZ dfs+hash
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ...
- bootStrap table 和 JS 开发过程中遇到问题汇总
1..bootStrap-table表头固定 在table定义的时候给高度属性就可以自动生成滚动条,并且固定表头[height: 220,] 2.为动态生成的DOM元素绑定事件 on("cl ...