Chrome插件开发学习——开发实战

来源:互联网 发布:纠正跑调的软件 编辑:程序博客网 时间:2024/05/21 21:40
一、为了获取用户点击时候的信息,用 js 很容易实现 content.js (注意必须写成单独的js页而且需要在manifest.json 里面注册)

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 data2chrome.runtime.onMessage.addListener(function(request, sender, sendRequest){if(request.type == ?) {data1 = request;//全局变量data1更新//do something} else{data2 = request;//全局变量data2更新//do something}    });其他人可以这样向通道里面输入消息:chrome.runtime.sendMessage("what you want to send");还可以这样去问背景页拿东西:(注意背景页总是能保存最新的消息,如果别人发的消息是新的消息,背景页需要一个名字保存下来,这样其他人要的时候就可以以这个名字向背景页去拿,而且如果某个人更新了这个消息,另一个人去拿一定是拿到最新版本的该名字对应的消息,这样也就是说,在背景页中保存的变量时全局的变量(切记全局变量))document.addEventListener('DOMContentLoaded', function () {    //获得背景页中的全局变量data1    data1 = chrome.extension.getBackgroundPage().data1;    //dosometion 更新data1        chrome.runtime.sendMessage(data1);});
    只有背景页收到data1而且更新data1 这是才能起到更新全局变量的作用
0 0
原创粉丝点击