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

一、为了获取用户点击时候的信息,用 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 data2
    
    chrome.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 这是才能起到更新全局变量的作用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值