我试图通过询问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
。
这里有什么问题?
答案 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);