如何在chrome扩展中检索后台消息监听器内的活动选项卡?

时间:2013-12-08 15:08:50

标签: javascript google-chrome-extension

我正在使用以下代码(在 background.js 中)获取活动标签

chrome.tabs.query({active: true, lastFocusedWindow: true}, function(tabs) {
    console.log("active tab retrieved : " + tabs[0].id);
});

这种方法很有效,除了一种情况:当这段代码在消息传递监听器中时。例如,下一个场景:

在background.js

chrome.runtime.onMessage.addListener(
    function(message, sender, sendResponse) { 
        console.log("message received");
        chrome.tabs.query({active: true, lastFocusedWindow: true}, function(tabs) {
            console.log("active tab retrieved : " + tabs[0].id);
        });
    }
);

* in content_script.js *

chrome.runtime.sendMessage({}, function(response) {});

我在控制台中只有以下内容

  收到

消息

我没有在控制台中获得第二个日志。

为什么会发生这种情况以及如何解决?

1 个答案:

答案 0 :(得分:1)

您的代码中有一个未闭合的括号,它会引发异常并中止执行。像这样纠正:

chrome.runtime.onMessage.addListener(
    function(message, sender, sendResponse) { 
        console.log("message received");
        chrome.tabs.query({active: true, lastFocusedWindow: true}, function(tabs) {
            console.log("active tab retrieved : " + tabs[0].id);
        });   // <-- add `);`
    }
);

那就是说,如果你只是想获得发送消息的标签,那就容易多了:

sender.tab.id