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

时间:2009-12-30 10:55:57

标签: google-chrome google-chrome-extension browser-tab

我正在使用Google Chrome扩展程序,我只是想知道如何将当前标签的网址存储在变量中?

9 个答案:

答案 0 :(得分:177)

更新:现在不推荐使用chrome.tabs.getSelected()方法。

获取当前标签网址的推荐方法是使用chrome.tabs.query()

示例用法:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    var url = tabs[0].url;
});

这要求您请求访问extension manifest中的chrome.tabs API:

"permissions": [ ...
   "tabs"
]

请注意,“当前标签”的定义可能因您的扩展程序需求而有所不同。

当您想要访问用户的焦点窗口(通常是最顶层的窗口)中的当前选项卡时,在查询中设置lastFocusedWindow: true是合适的。

设置currentWindow: true可让您获取当前正在执行扩展程序代码的窗口中的当前选项卡。例如,如果您的扩展程序创建了一个新窗口/弹出窗口(更改焦点),但仍希望从运行扩展程序的窗口访问选项卡信息,这可能很有用。

我选择在此示例中使用lastFocusedWindow: true,因为Google会调出currentWindow may not always be present的案例。

您可以使用此处定义的任何属性进一步优化标签查询:chrome.tabs.query

答案 1 :(得分:74)

朋友回答了我的问题。

首先,您需要设置标签API的权限:

"permissions": [
    "tabs"
]

并存储网址:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});

答案 2 :(得分:28)

其他答案假设您想从弹出窗口或后台脚本中了解它。

如果您想知道内容脚本中的当前网址,则采用标准JS方式:

window.location.toString()

您可以使用window.location的属性访问网址的各个部分,例如主机,协议或路径。

答案 3 :(得分:25)

问题是chrome.tabs.getSelected是异步的。下面的代码通常不会按预期工作。 'tablink'的值在写入控制台时仍然是未定义的,因为getSelected尚未调用重置值的回调:

var tablink;
chrome.tabs.getSelected(null,function(tab) {
    tablink = tab.url;
});
console.log(tablink);

解决方案是将代码包装在您将使用函数中的值的位置,并使用getSelected调用该代码。通过这种方式,您可以保证始终具有值集,因为您的代码必须等待在执行之前提供该值。

尝试类似:

chrome.tabs.getSelected(null, function(tab) {
    myFunction(tab.url);
});

function myFunction(tablink) {
  // do stuff here
  console.log(tablink);
}

答案 4 :(得分:2)

您好,这是一个Google Chrome示例,可将当前网站通过电子邮件发送给朋友。背后的基本思想是你想要的......首先它取出页面的内容(不适合你)......然后它获取URL(< - 好的部分)

此外,这是一个很好的工作代码示例,我更喜欢阅读文档。

可以在这里找到: Email this page

答案 5 :(得分:2)

此解决方案已经过测试。

在manifest.json中设置API权限

"permissions": [ ...
   "tabs",
    "activeTab",
    "<all_urls>"
]

首次加载调用功能。 https://developer.chrome.com/extensions/tabs#event-onActivated

chrome.tabs.onActivated.addListener((activeInfo) => {  
  sendCurrentUrl()
})

更改呼叫功能。 https://developer.chrome.com/extensions/tabs#event-onSelectionChanged

chrome.tabs.onSelectionChanged.addListener(() => {
  sendCurrentUrl()
})

获取网址的功能

function sendCurrentUrl() {
  chrome.tabs.getSelected(null, function(tab) {
    var tablink = tab.url
    console.log(tablink)
  })

答案 6 :(得分:0)

对于那些使用context menu api的人,文档并没有立即明确如何获取标签信息。

  chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log(info);
    return console.log(tab);
  });

https://developer.chrome.com/extensions/contextMenus

答案 7 :(得分:0)

这是一个非常简单的方法

window.location.toString();  

您可能必须这样做是内容脚本,因为它具有网页上的 js 文件可以具有的所有功能以及更多。

答案 8 :(得分:-1)

您必须查看this

<强> HTML

<button id="saveActionId"> Save </button>

<强>的manifest.json

  "permissions": [
    "activeTab",
    "tabs"
   ]

JavaScript
以下代码将活动窗口的所有URL保存到JSON对象中,作为按钮单击的一部分。

var saveActionButton = document.getElementById('saveActionId');
saveActionButton.addEventListener('click', function() {
    myArray = [];
    chrome.tabs.query({"currentWindow": true},  //{"windowId": targetWindow.id, "index": tabPosition});
    function (array_of_Tabs) {  //Tab tab
        arrayLength = array_of_Tabs.length;
        //alert(arrayLength);
        for (var i = 0; i < arrayLength; i++) {
            myArray.push(array_of_Tabs[i].url);
        }
        obj = JSON.parse(JSON.stringify(myArray));
    });
}, false);