我怎样才能得到当前的标签网址的铬扩展?

我知道有很多类似的问题,但我似乎不能得到它的工作。

我正试图从我的 Chrome 扩展中获取当前标签的 URL。然而,警报(tab.url)返回“ UnDefinition”。我已经在 Manif.json 中将“ tab”添加到我的权限中。有什么想法吗?

<html>
<head>
<script>


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


alert(tab.url);
});


</script>
</head>
94319 次浏览

问题在于:

tab = tab.id;

应该是这样的:

var tabId = tab.id;

仅供谷歌用户参考:

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


});

这就是对我有效的方法:

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);
});

Json:

"permissions": [
"tabs"
]

在 JavaScript 中:

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);
});

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

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

只是如果有人使用 网页扩展填料像我一样,为跨浏览器支持。

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


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

请记住将其添加到 Manif.json 文件中

"permissions": [
"tabs"
]


对我来说,根据 Kartik Kkartin的回答,我错过了“制表符”权限

剩下的代码在我的后台脚本中

chrome?.tabs?.onUpdated?.addListener((tabId, changeInfo, tab) => {
if (changeInfo.status == 'complete') {
console.log('tabId', tabId, 'changeInfo', changeInfo, 'tab', tab)
}
})

这将记录选项卡信息,包括加载选项卡时 tab.url中的 URL

最新的版本表明它必须像这样

async function getCurrentTab() {
let queryOptions = { active: true, lastFocusedWindow: true };
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}

你必须 加入你的宣言

"permissions: [
"tabs"
]