SendRequest无法正常返回

时间:2011-09-14 12:11:57

标签: google-chrome-extension

按下弹出窗口后,它会使用背景页面向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]});
  }
}

0 个答案:

没有答案