2017-05-02 50 views
3

我在嘗試將Chrome擴展的後臺腳本分解爲更小,更易於管理的個別腳本,這些腳本通過消息傳遞與對方通信。現在我有兩個腳本background.jsdatabase.jsChrome擴展後臺頁面之間的郵件傳遞不正確

background.js

var message = 1; 
console.log("Background.js running"); 
console.log("Sending message " + message); 
chrome.runtime.sendMessage(message, function (response) { 
    console.log("Response received " + response); 
    message+=1; 
}) 

database.js

console.log("Database.js running"); 
chrome.runtime.onMessage.addListener(function (request, requester, sendResponse) 
{ 
    console.log("message received " + request); 
    console.log("Sending response " + request); 
    sendResponse(request); 
    return true; 
}); 

他們在啓動時和database.js都運行註冊表信息listener.I然後database.js使用的sendMessage,希望能夠接收和處理它database.js。但是,立即調用發送消息的回調,並返回一個空響應,並且database.js中的處理程序不會觸發。

當我運行上述兩個腳本的延長,我想看到的輸出:

Database.js running 
Background.js running 
Sending message 1 
Message received 1 
Sending response 1 
Response received 1 

我反而得到:

Database.js running 
Background.js running 
Sending message 1 
Response received undefined 

是什麼原因導致這種行爲,是可以解決的?

+0

也許你應該發佈這個[MCVE]。 – pvg

+0

爲什麼消息傳遞的是相同的上下文,而不僅僅是調用函數? –

回答

1

根據documentation

如果發送給您的延長,runtime.onMessage活動將 在擴展的每一幀發射(除了發件人的框架

您無法在發送相同的幀/上下文中收到消息。就像Daniel Herr指出的那樣,你可以調用你想要的函數而不是傳遞消息。

+0

謝謝,我誤解了架構的工作原理。我認爲不同的後臺腳本比他們實際上更孤立。 – ThisIsNoZaku

相關問題