将回调传递给chrome.storage.sync.get

时间:2017-09-07 09:48:01

标签: javascript google-chrome-extension

我试图通过询问background.js来获取内容脚本中的扩展首选项。

contentscript.js

chrome.runtime.sendMessage({'action' : 'preferences'}, 
    function(prefs) {
        console.log(prefs);
    }
);

background.js

function onRequest(request, sender, callbackOfContentScript) {
    chrome.storage.sync.get(null, function(items){
        callbackOfContentScript(items);
    });
}
chrome.runtime.onMessage.addListener(onRequest);
内容脚本中的

console.log返回undefined

这里有什么问题?

1 个答案:

答案 0 :(得分:2)

您使用异步消息传递。 onMessage docs表示如果要使其异步,则必须在return true回调中sendResponse

  

...除非你从事件监听器返回true 以表明你希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse)。

所以,解决方案将是:

<强> background.js

function onRequest(request, sender, callbackOfContentScript) {
    chrome.storage.sync.get(null, function(items){
        callbackOfContentScript(items);
    });
    return true; // <-- it makes the job
}
chrome.runtime.onMessage.addListener(onRequest);