一、为了获取用户点击时候的信息,用 js 很容易实现 content.js (注意必须写成单独的js页而且需要在manifest.json 里面注册)
1、如何注册呢?
1、如何注册呢?
任意一个模式匹配本质上都是一个以认可的协议(例如:http, https, file, ftp 或者chrome-extension)开头的URL,只是URL你可以包含"*"字符.这里有一种特殊的模式匹配,它表示所有已认可的协议开头的URL都被匹配. 每个模式匹配都由以下三部分构成:
- 协议(scheme)— 例如,http or file or*
注意:file协议不是缺省的(访问文件时可能需要明确指明使用file协议).用户可以访问扩展管理页面或者设置页面来查看每个扩展独立的file协议设置.
- 域名(host)— 例如,www.google.com或者*.google.com或者*; 如果使用file协议,这里就不需要域名部分
- 路径(path)— 例如,*"],
//需要用到的js都要在这里说明
"js":["js/jquery-2.0.0.min.js", "js/rule.js", "js/rule_creater.js","js/rule_catcher.js"]
}]
content.js 是在页面完全加载完成后,Chrome浏览器主动嵌入到当前网页中的,它的生命周期是和浏览器的生命周期一样
二、获取到的信息如何在Chrome浏览器插件直接传递?
首先注册 控制中心,也就是 background.js 可以说它是浏览器网页与插件内容交流的枢纽!
在页面上获取到的信息可以传递给 chrome.extention.runtiom.sendMessage()发送到插件运行时的空间里面
这里有点像淘宝的消息中间件一样,不过可能只有一个存的地方。其他人去那个地方拿,拿到的就是那个最新版本(这里还需要测试,是否可以很多人同时拿?)
那就是背景页:
扩展常常用一个单独的长时间运行的脚本来管理一些任务或者状态。 Background pages to the rescue.
如同
architectureoverview 的解释。背景页是一个运行在扩展进程中的HTML页面。它在你的扩展的整个生命周期都存在,同时,在同一时间只有一个实例处于活动状态。 在一个有背景页的典型扩展中,用户界面(比如,浏览器行为或者页面行为和任何选项页)是由沉默视图实现的。当视图需要一些状态,它从背景页获取该状态。当背景页发现了状态改变,它会通知视图进行更新。
背景也也需要先注册:
"background": { "scripts": ["background.js"] }, 然后可以这样写背景页: var data1; var data2 chrome.runtime.onMessage.addListener(function(request, sender, sendRequest){ if(request.type == ?) { data1 = request;//全局变量data1更新 //do something } else{ data2 = request;//全局变量data2更新 //do something }
只有背景页收到data1而且更新data1 这是才能起到更新全局变量的作用}); 其他人可以这样向通道里面输入消息: chrome.runtime.sendMessage("what you want to send"); 还可以这样去问背景页拿东西:(注意背景页总是能保存最新的消息,如果别人发的消息是新的消息,背景页需要一个名字保存下来,这样其他人要的时候就可以以这个名字向背景页去拿,而且如果某个人更新了这个消息,另一个人去拿一定是拿到最新版本的该名字对应的消息,这样也就是说,在背景页中保存的变量时全局的变量(切记全局变量)) document.addEventListener('DOMContentLoaded', function () { //获得背景页中的全局变量data1 data1 = chrome.extension.getBackgroundPage().data1; //dosometion 更新data1 chrome.runtime.sendMessage(data1); });