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扩展应用实例的更多相关文章

  1. 清除页面广告?身为前端,自己做一款简易的chrome扩展吧

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  2. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  3. Chrome扩展开发之一——Chrome扩展的文件结构

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. chrome扩展写法

    最近看到公司同事经常写chrome扩展,来提高生成效率,回想想自己以前也写过chrome扩展,但是由于不经常写,也没做积累也都忘记了,现在重新回顾一下. 一.chrome扩展基本概念 chrome扩展 ...

  5. 如何写chrome扩展

    转载:http://www.cnblogs.com/pingfan1990/p/4560215.html 最近看到公司同事经常写chrome扩展,来提高生成效率,回想想自己以前也写过chrome扩展, ...

  6. 自己做一款简易的chrome扩展--清除页面广告

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  7. Chrome扩展,应用开发学习笔记之2---恶搞百度一下

    Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...

  8. chrome扩展程序开发

    首先,明确两个概念的区别:chrome扩展程序和Web Apps.具体参考:http://www.chromi.org/archives/10106 本文只讨论chrome扩展程序. 最好的开发教程莫 ...

  9. 一起来做chrome扩展《可配置的代理》

    一.本文主要涉及相关内容: chrome.proxy pacScript browser_action popup localStroage 二.预览 (代理运行截图,图中的代理服务器有防火墙,暂不对 ...

随机推荐

  1. Ansible学习实战手记-你想要知道的可能都在这里了

    最近接触了ansible工具,查找了一些资料,也做了一些总结.希望能给刚接触的新手带来一些帮助. 此总结有实际例子,大部分也是从实践中用到才逐一总结的. 当然可能肯定一定会存在一些错误和纰漏,还望大家 ...

  2. 平常比较多实用的SQL

    创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...

  3. codeforces 982C Cut 'em all!

    题意: 给出一棵树,问最多去掉多少条边之后,剩下的连通分量的size都是偶数. 思路: 如果本来就是奇数个点,那么无论去掉多少条边都不可能成立的. 如果是偶数个点,就进行一次dfs,假设一个点的父亲是 ...

  4. Shell脚本:while read line无法读取最后一行的问题

    [1]Shell脚本:while read line无法读取最后一行的问题 刚刚利用shell脚本处理日志文件时,发现了一个问题:while read line无法读取到最后一行 通过编辑器可以看到待 ...

  5. Class_fourth

    动手动脑 1,多层异常捕捉一 2,多层异常捕捉二 3,EmbedFinally.java示例 最先截获的错误 最后输出finally 4, SystemExitAndFinally.java示例 如果 ...

  6. <转>jmeter(二十一)jmeter常用插件介绍

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  7. Oracle 12c 的RMAN备份

    备份 rman只备份cdb 只备份CDB数据库需要具有SYSDBA或SYSBACKUP权限用户连接到CDB的root环境下,执行backupdatabase root命令即可完成对CDB的备份,方法如 ...

  8. Java同步锁——lock与synchronized 的区别【转】

    在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一.Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchroni ...

  9. NPOI解决由于excel删除数据导致空行读取问题

    1.解决问题思路一:申明判断是否空行变量用于判断是否空行,声明变量数组用于临时非空行数据,最后存于datatable中. /// <summary>读取excel, /// 默认第一行为表 ...

  10. Ansible 的安装

    On Fedora: $ sudo dnf install ansible On RHEL and CentOS: $ sudo yum install ansible On Ubuntu: $ su ...