如何从 Google Chrome 扩展程序获取当前选项卡的 URL?
我很喜欢使用 Google Chrome 扩展程序,我只是想知道如何将当前标签的 URL 存储在变量中?
使用 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!
});
您需要在
扩展程序清单
中请求
tabs
或
activeTab
权限:
"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
。
其他答案假设您想从弹出窗口或后台脚本中了解它。
如果您想 从内容脚本 了解当前 URL,则适用标准 JS 方式:
window.location.toString()
您可以使用
window.location
的属性来访问 URL 的各个部分,例如主机、协议或路径。
警告!
chrome.tabs.getSelected
已
弃用
。请使用其他答案中所示的
chrome.tabs.query
。
首先,您必须在 manifest.json 中设置 API 的权限:
"permissions": [
"tabs"
]
并存储 URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});