简体   繁体   中英

How to retrieve the active tab, inside message listener in background, in chrome extension?

I'm using the following code (in background.js ) to get the active tab

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

This works great, except for one case: when this piece of code is inside a messaging listener. For example the next scenario:

In 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) {});

I only got the following in console

message received

and I didn't get the second log in console.

Why is this happening and how to solve it ?

There is an unclosed parenthesis in your code, which raises an exception and aborts execution. Correct it like this:

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 `);`
    }
);

That said, if you just want to get the tab that sent the message, it is much easier:

sender.tab.id

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM