0

我想消息傳遞在鉻擴展。我按照這個例子(see here) - :鉻擴展消息傳遞沒有響應 - 告別:undefined

content_script:

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
console.log(response.farewell); 
}); 

背景:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 
}); 

popup.js

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
     "from a content script:" + sender.tab.url : 
     "from the extension"); 
    if (request.greeting == "hello") 
     console.log("message recive") 
     sendResponse({farewell: "goodbye"}); 
}); 

雖然我沒有複製粘貼 - 消息不發送。錯誤彈出:

在事件處理誤差(未知):類型錯誤:無法讀取的不確定

哪裏錯財產「告別」?

回答

0

彈出窗口在關閉時不存在。

因此,此刻,當被髮送的消息有可能沒有人聽,所謂與undefined作爲響應(並用組chrome.runtime.lastError)回調。

從架構的角度來看,後臺頁面總是可用於處理消息;因此,onMessage聽衆,在大多數(並非全部)情況下在那裏好。

我會建議看看這個問題,以及我更詳細地解釋一些概念:Pass a variable from content script to popup

此外,爲了以防萬一,所有這個問候 - 再見示例代碼只是一個例子;你可以傳遞任何JSON序列化的東西。

+0

謝謝,我要閱讀 – blueberry