【发布时间】:2015-04-05 16:17:35
【问题描述】:
我正在尝试构建一个 chrome 扩展,该扩展涉及将数据请求从弹出脚本发送到内容脚本(通过后台脚本)分析内容脚本端的请求并发送回响应(再次通过后台脚本)。
弹窗脚本代码:
chrome.runtime.sendMessage({action:"getLanguages",data:"hi hi",}, function(response) {
document.write(response.msg);
});
后台脚本:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
var returnedLangs;
if (request.action == "getLanguages"){
returnedLangs = getLangs();
alert("got langs " + returnedLangs);
//sendResponse({msg: "goodbye"});
}
});
function getLangs() {
var langs;
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {action: "getLanguages"}, function(response) {
langs = response.langs;
alert(langs);
return langs;
});
});
}
内容脚本代码:
chrome.extension.onMessage.addListener( function(request, sender, sendResponse)
{
getLanguages(sendResponse,sendBackLangs);
});
function getLanguages(sendResponse,callback) {
var acceptLangs = [];
chrome.i18n.getAcceptLanguages(function(langs) {
langs.forEach( function(lang) {
acceptLangs.push(lang);
});
callback(sendResponse,acceptLangs);
});
}
function sendBackLangs(sendResponse, acceptedLangs) {
sendResponse({langs: "acceptedLangs"});
}
使用当前内容脚本代码,不会将响应发送回后台,但如果我直接从 chrome.extension.onMessage... 函数发送响应,则响应将返回后台。 谁能帮助我了解导致这种行为的原因以及如何解决?
【问题讨论】:
标签: javascript jquery html google-chrome-extension