开发者问题收集

如何从 Google Chrome 扩展程序获取当前选项卡的 URL?

2009-12-30
305698

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

3个回答

使用 chrome.tabs.query

ManifestV3:

(async () => {
  // see the note below on how to choose currentWindow or lastFocusedWindow
  const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true});
  console.log(tab.url);
  // ..........
})();

ManifestV2/V3:

// see the note below on how to choose currentWindow or lastFocusedWindow
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
    let url = tabs[0].url;
    // use `url` here inside the callback because it's asynchronous!
});

您需要在 扩展程序清单 中请求 tabsactiveTab 权限:

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

"permissions": [ ...
   "activeTab"
]

如果您的代码在用户明确调用后使用 chrome.tabs.query,则首选 activeTab 扩展程序(单击其图标或其上下文菜单项或按下其 chrome.commands 热键),因为此权限不会在安装扩展程序时添加任何警告,不像 tabs 那样添加 读取您的浏览历史记录 ,这可能会吓到一些用户。

“当前选项卡”定义取决于您的需求:

  • currentWindow: true 始终使用最初显示弹出窗口的窗口,无论用户在打开弹出窗口后是否切换到另一个窗口。弹出脚本开始时通常没有区别,因为它在原始窗口仍处于焦点时运行。术语 currentWindow 表示“当前正在运行的扩展代码的窗口”。

  • lastFocusedWindow: true 使用调用时实际聚焦的窗口(通常是最顶层的窗口),如果用户切换到另一个窗口(或您的扩展打开了一个新窗口),则该窗口可能与显示弹出窗口的原始窗口不同,并且在此之后调用 chrome.tabs.query,例如在弹出窗口中的按钮的点击监听器中。

  • chrome.runtime.onMessage 监听器通常应使用 sender 参数中的 sender.tab

thauburger
2013-01-10

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

如果您想 从内容脚本 了解当前 URL,则适用标准 JS 方式:

window.location.toString()

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

Xan
2016-07-20

警告! chrome.tabs.getSelected 弃用 。请使用其他答案中所示的 chrome.tabs.query


首先,您必须在 manifest.json 中设置 API 的权限:

"permissions": [
    "tabs"
]

并存储 URL:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});
Axiol
2009-12-30