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

Axi*_*iol 166 google-chrome google-chrome-extension browser-tab

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

tha*_*ger 189

更新:chrome.tabs.getSelected()方法现已弃用.

获取当前选项卡的URL的推荐方法是使用chrome.tabs.query().

示例用法:

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

这要求您chrome.tabs扩展程序清单中请求访问API :

"permissions": [ ...
   "tabs"
]
Run Code Online (Sandbox Code Playgroud)

请务必注意,"当前标签"的定义可能会因您的扩展需求而有所不同.

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

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

我选择lastFocusedWindow: true在这个例子中使用,因为谷歌调出的案例currentWindow 可能并不总是存在.

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

  • 为什么网址总是未定义? (24认同)
  • 如果url未定义,请尝试从chrome:// extensions重新加载扩展程序这将重新加载扩展程序的配置并应用新添加的"tabs"权限. (2认同)
  • url未定义,因为http://stackoverflow.com/questions/28786723/why-doesnt-chrome-tabs-query-return-the-tabs-url-when-called-using-requirejs(回答:关闭你的开发工具窗口或更改为currentWindow而不是lastFocusedWindow) (2认同)
  • 当我的开发工具窗口未固定时,我不确定。对接它可以解决未定义的问题。 (2认同)

Axi*_*iol 75

朋友回答我的问题.

首先,您需要设置选项卡API的权限:

"permissions": [
    "tabs"
]
Run Code Online (Sandbox Code Playgroud)

并存储URL:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用`chrome.tabs.getSelected`方法,正确的方法在[this below answer]中列出(http://stackoverflow.com/questions/1979583/how-can-i-get-the-url-for -a-谷歌铬选项卡/ 14251218#14251218). (10认同)

Xan*_*Xan 36

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

如果您想知道内容脚本中的当前URL ,标准JS方式适用:

window.location.toString()
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上是我一直在寻找的。我对扩展机制太着迷了,以至于我忘记了您可以使用 window.location.href 获取页面的 URL。 (4认同)

小智 25

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

var tablink;
chrome.tabs.getSelected(null,function(tab) {
    tablink = tab.url;
});
console.log(tablink);
Run Code Online (Sandbox Code Playgroud)

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

尝试类似的东西:

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

function myFunction(tablink) {
  // do stuff here
  console.log(tablink);
}
Run Code Online (Sandbox Code Playgroud)

  • 我试过这个,但得到url undefined为什么这个? (2认同)