按下弹出窗口后,它会使用背景页面向contentcript发送请求。 contentcript然后返回对后台页面的响应,后者执行一些工作,然后将该工作的结果传递给弹出窗口。
第一次按下弹出窗口时效果很好,但是如果我再次按下它,它就不起作用了。发送请求并且每个函数都被命中,但内容脚本的响应为零。
这有什么常见的原因吗?我不知道这里发生了什么。
编辑:(代码)
popup:
chrome.tabs.getSelected(null, function(tab) {
makeButtons()
paint(display, tab)
});
function paint(display, tab) {
chrome.extension.getBackgroundPage().retrieveData(tab, function(data) {
paintEach(data[1])
paintEach(data[2])
paintEach(data[3])
});
}
background:
function retrieveData(tab, callback) {
if(tab) {
data = {}
data[1] = getData(1)
data[2] = getData(2)
if(tabs[tab.id]) {
sendMessage(tab.id, function(response) {
data[3] = response
callback(data)
});
}
else {
data[3] = null
callback(data)
}
}
}
function sendMessage(tabId, callback) {
chrome.tabs.sendRequest(tabId, {method: "dataRequest"}, function(response) {
if(response.method == "accepted") {
if(callback) {
callback(response)
}
}
});
}
contentScript:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "dataRequest") {
var dataElems = findData(document.body.getElementsByClassName("className"));
sendResponse({method: "questions", 1: dataElems[0], 2: dataElems[1], 3: dataElems[3]});
}
}