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.”。
新聞熱點
疑難解答