Chrome扩展基础---扩展页面间的通信

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

    chrome 提供了4个 有关扩展页面间相互通信的接口,分别是runtime.sendMessage、runtime.onMessage、runtime.connect和runtime.onConnect。

    接下来主要说下runtime.sendMessage和runtime.onMessage

请注意,Chrome提供的大部分API是不支持在content_scripts中运行的,但runtime.sendMessage和runtime.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发送给监听此消息的外部扩展,这是有关加强用户连接安全性的技术,如果这个参数你捉摸不透,不必理睬它,options是一个可选参数;

callback是回调函数,用于接收返回结果,同样是一个可选参数。


runtime.onMessage完整的方法为:

            chrome.runtime.onMessage.addListener(callback)

callback为必选参数,为回调函数。

callback接收到的参数有三个,分别是message、sender和sendResponse,即消息内容、消息发送者相关信息和相应函数。其中sender对象包含4个属性,分别是tab、id、url和tlsChannelId,tab是发起消息的标签,

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

在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.”。

你可能感兴趣的:(Chrome扩展基础---扩展页面间的通信)