Chrome扩展弹出窗口未接收标签查询响应

时间:2017-07-18 20:05:16

标签: javascript google-chrome-extension

我面临的问题非常有趣。我已经设置了我的背景和弹出窗口之间的通信,它完全正常,直到我试图访问chrome.tabs.query回调中的数据。

请问你可能会出现什么问题?

background.js

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting === 'getTabs') {
      chrome.tabs.query({},function(tabs){
        sendResponse(tabs);
      });
    }

    if (request.greeting === 'test') {
      sendResponse('test-string');
    }
});

popup.js

$(document).ready(function(){
  $('button').on('click', function(){
    chrome.extension.sendMessage({greeting: 'getTabs'}, function(response){
      console.log(response);
    });
    chrome.extension.sendMessage({greeting: 'test'}, function(response){
      console.log(response);
    });
  });

});

我调试了background.js部分,我得到了标签的arra,但由于某种原因它没有作为响应发送,即使sendResponse(tabs)在回调函数中。另外,如果我设置一个静态字符串,比如'apple',它也不会发送它。

1 个答案:

答案 0 :(得分:0)

我最终找到了我的问题的答案,虽然我无法理解,为什么它会解决问题。

background.js

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting === 'getTabs') {
      chrome.tabs.query({},function(tabs){
        sendResponse(tabs);
      });
    }

    if (request.greeting === 'test') {
      sendResponse('test-string');
    }
    return true;
});

我必须返回true,否则chrome messaging.js中的端口为null。