如何获取Chrome扩展程序的当前标签网址?

时间:2011-05-25 23:13:13

标签: google-chrome google-chrome-extension

我知道在SO上有很多类似的问题,但我似乎无法让它发挥作用。

我正在尝试从Chrome扩展程序中获取当前标签的网址。 Hoewever,警报(tab.url)返回“Undefined”。我在manifest.json中添加了“tabs”到我的权限。有什么想法吗?

<html>
<head>
<script>

    chrome.tabs.getSelected(null, function(tab) {
        tab = tab.id;
        tabUrl = tab.url;

        alert(tab.url);
    });

</script>
</head>

6 个答案:

答案 0 :(得分:106)

对于谷歌人来说只是一个FYI:

不推荐使用OP使用的方法。要获取用户正在查看的选项卡,并且只在他们正在查看的窗口中使用此选项:

  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {

     // since only one tab should be active and in the current window at once
     // the return variable should only have one entry
     var activeTab = tabs[0];
     var activeTabId = activeTab.id; // or do whatever you need

  });

答案 1 :(得分:28)

问题出在这一行:

tab = tab.id;

应该是这样的:

var tabId = tab.id;

答案 2 :(得分:7)

这对我有用:

chrome.tabs.query({
    active: true,
    lastFocusedWindow: true
}, function(tabs) {
    // and use that tab to fill in out title and url
    var tab = tabs[0];
    console.log(tab.url);
    alert(tab.url);
});

答案 3 :(得分:3)

manifest.json =&gt;

“权限”:[     “标签”   ]

在js =&gt;

       chrome.tabs.query({
            active: true,
            lastFocusedWindow: true
        }, function(tabs) {
            // and use that tab to fill in out title and url
            var tab = tabs[0];
            console.log(tab.url);
            alert(tab.url);
        });

答案 4 :(得分:3)

在ES6的帮助下,您可以轻松编写更好的代码:)

chrome.tabs.query({
  active: true,
  currentWindow: true
}, ([currentTab]) => {
  console.log(currentTab.id);
});

答案 5 :(得分:0)

就像有人像我一样使用 Web Extension Polyfill 来实现跨浏览器支持。

// using async function
const [currentTab] = await browser.tabs.query({
  active: true,
  currentWindow: true,
});

console.log({ id: currentTab.id, url: currentTab.url });