1

我的背景聽者Chrome擴展程序:如何將消息從背景發送到背景?

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) 

chrome.contextMenus.onClicked聽衆,我想使用的消息系統,我稱之爲

chrome.runtime.sendMessage 

在監聽器,但它不是作品。

那麼,我怎樣才能從背景sendMessage到背景?

回答

5

消息不被同一頁面接收。

如果您希望能夠重新使用onMessage偵聽器,請將其放入單獨的函數中。例如:

function alwaysDoSomething() { 
    console.log('Done something!'); 
} 
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 
    alwaysDoSomething(); 
}); 
chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    alwaysDoSomething(); 
}); 

有一種可用於手動觸發事件的未記錄方法。 這是無證的,所以使用它需要您自擔風險

chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    var message = 'whatever'; 
    var sender = {tab: null, id: chrome.runtime.id}; 
    var sendResponse = function() {}; 
    chrome.runtime.onMessage.dispatch(message, sender, sendResponse); 
}); 
+0

謝謝,也許這是我可以實現目標的唯一方式。實際上,對於每條消息我都有一個函數來完成這個工作,函數需要與偵聽器相同的參數。如果我直接調用函數,它會使我的結構變得複雜。 – wener

+0

@wener最簡潔的方法是在我的答案上發佈,不需要對代碼進行任何更改的方法將發佈在最後。 –

+0

謝謝,它看起來很奇怪,但我沒有其他選擇。也許這是擴展系統中的錯過。 – wener

0

我認爲你應該使用一個頁面派出chrome.extension.onRequestExternalchrome.extension.onConnectExternal

+0

我必須確保聽衆能夠從contentScript和彈出,現在contentScript聽消息,並彈出窗口工作正常,但在後臺它不能正常工作。 – wener

相關問題