Chrome提供了4个有关扩展页面间相互通信的接口,分别是runtime.sendMessage
、runtime.onMessage
、runtime.connect
和runtime.onConnect
Chrome提供的大部分API是不支持在 content_scripts
中运行的,但 runtime.sendMessage
和 runtime.onMessage
可以在 content_scripts
中运行,所以扩展的其他页面也可以同 content_scripts
相互通信。
runtime.sendMessage
完整的方法为:
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是回调函数,用于接收返回结果,同样是一个可选参数。 此属性仅在扩展和网页间通信时才会用到。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.”。
新闻热点
疑难解答