如何从后台页面获取当前tabId

wii*_*man 33 google-chrome-extension

如何从后台页面获取当前tabId?current tabId是用户可以看到其内容的选项卡.

background.html

<html>
<head>
    <script>

    if(typeof localStorage.state == 'undefined')
        localStorage.state = 'off'
    chrome.browserAction.onClicked.addListener(function(tab) {
        if(localStorage.state == 'on')
        {
            localStorage.state = 'off';
        }
        else
        {
            localStorage.state = 'on';
        }
        chrome.browserAction.setBadgeText({text: localStorage.state, tabId: tab.id});
        chrome.tabs.sendRequest(tab.id, {state: localStorage.state});
        //chrome.tabs.sendRequest(tab.id, {state: localStorage.state});
    });
    </script>
</head>
Run Code Online (Sandbox Code Playgroud)

Ari*_*iac 46

getSelected已被弃用.新方法是:

chrome.tabs.query(
  {currentWindow: true, active : true},
  function(tabArray){...}
)
Run Code Online (Sandbox Code Playgroud)

如果要在活动选项卡上执行某些回调,可以将上面的内容包装为:

function doInCurrentTab(tabCallback) {
    chrome.tabs.query(
        { currentWindow: true, active: true },
        function (tabArray) { tabCallback(tabArray[0]); }
    );
}
Run Code Online (Sandbox Code Playgroud)

例如

var activeTabId;
doInCurrentTab( function(tab){ activeTabId = tab.id } );
Run Code Online (Sandbox Code Playgroud)

  • 这似乎完全没有用.如果我在回调中执行`console.log(activeTabId);`(例如`function(tab){...}`)我可以看到tab.id已设置,但是一旦doInCurrentTab返回,activeTabId仍未定义.Google改变了一些破坏了这个的东西吗? (2认同)

mc.*_*mc. 6

在后台页面中运行此命令

chrome.tabs.query({active:true,windowType:"normal", currentWindow: true},function(d){console.debug(d);})
Run Code Online (Sandbox Code Playgroud)

甚至更好

chrome.tabs.query({active:true,windowType:"normal", currentWindow: true},function(d){console.debug(d[0].id);})
Run Code Online (Sandbox Code Playgroud)

  • 这将获得所有窗口中的所有活动选项卡.因此,如果您打开了多个窗口,您将获得多个选项卡. (2认同)

Eli*_*ier 6

根据官方文档:Manifest V3(承诺),将于 2023 年 1 月起强制执行 https://developer.chrome.com/docs/extensions/reference/tabs/#get-the-current-tab

async function getCurrentTab() {
  let queryOptions = { active: true, lastFocusedWindow: true };
  let [tab] = await chrome.tabs.query(queryOptions);
  return tab;
}
Run Code Online (Sandbox Code Playgroud)


ser*_*erg 3

许多 API 方法将其解释null为当前选项卡。chrome.tabs.sendRequest是其中之一。

否则:

chrome.tabs.getSelected(null, function(tab) { ... })
Run Code Online (Sandbox Code Playgroud)