• Chrome扩展及应用开发-扩展页面间的通信


    https://www.ituring.com.cn/book/miniarticle/60272

    2.5 扩展页面间的通信

    有时需要让扩展中的多个页面之间,或者不同扩展的多个页面之间相互传输数据,以获得彼此的状态。比如音乐播放器扩展,当用户鼠标点击popup页面中的音乐列表时,popup页面应该将用户这个指令告知后台页面,之后后台页面开始播放相应的音乐。

    Chrome提供了4个有关扩展页面间相互通信的接口,分别是runtime.sendMessageruntime.onMessageruntime.connectruntime.onConnect。做为一部入门级教程,此节将只讲解runtime.sendMessageruntime.onMessage接口,runtime.connectruntime.onConnect做为更高级的接口请读者依据自己的兴趣自行学习,你可以在http://developer.chrome.com/extensions/extension得到有关这两个接口的完整官方文档。

    请注意,Chrome提供的大部分API是不支持在content_scripts中运行的,但runtime.sendMessageruntime.onMessage可以在content_scripts中运行,所以扩展的其他页面也可以同content_scripts相互通信。

    runtime.sendMessage完整的方法为:

    chrome.runtime.sendMessage(extensionId, message, options, callback)
    

    其中extensionId为所发送消息的目标扩展,如果不指定这个值,则默认为发起此消息的扩展本身;message为要发送的内容,类型随意,内容随意,比如可以是'Hello',也可以是{action: 'play'}2013['Jim', 'Tom', 'Kate']等等;options为对象类型,包含一个值为布尔型的includeTlsChannelId属性,此属性的值决定扩展发起此消息时是否要将TLS通道ID发送给监听此消息的外部扩展1,有关TLS的相关内容可以参考http://www.google.com/intl/zh-CN/chrome/browser/privacy/whitepaper.html#tls,这是有关加强用户连接安全性的技术,如果这个参数你捉摸不透,不必理睬它,options是一个可选参数;callback是回调函数,用于接收返回结果,同样是一个可选参数。

    1 此属性仅在扩展和网页间通信时才会用到。

    runtime.onMessage完整的方法为:

    chrome.runtime.onMessage.addListener(callback)
    

    此处的callback为必选参数,为回调函数。callback接收到的参数有三个,分别是messagesendersendResponse,即消息内容、消息发送者相关信息和相应函数。其中sender对象包含4个属性,分别是tabidurltlsChannelIdtab是发起消息的标签,有关标签的内容可以参看4.5节的内容。

    为了进一步说明,下面举一个例子。

    在popup.html中执行如下代码:

    chrome.runtime.sendMessage('Hello', function(response){
        document.write(response);
    });
    

    在background中执行如下代码:

    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
        if(message == 'Hello'){
            sendResponse('Hello from background.');
        }
    });
    

    查看popup.html页面会发现有输出“Hello from background.”。


    扩展内部通信Demo的运行画面

    上面这个小例子的源代码可以从https://github.com/sneezry/chrome_extensions_and_apps_programming/tree/master/runtime.sendMessage_runtime.onMessage_demo下载到。

     
  • 相关阅读:
    桥接模式(Bridge)
    Python中文件操作
    Python中字符的编码与解码
    反转部分单向链表
    删除链表的中间节点和a/b处的节点
    链表中删除倒数第K个节点
    如何实现链表的逆序
    Python高阶函数及函数柯里化
    Python函数作用域
    Python函数参数与参数解构
  • 原文地址:https://www.cnblogs.com/xiondun/p/13408155.html
Copyright © 2020-2023  润新知