我正在使用Google Chrome扩展程序,我只是想知道如何将当前标签的网址存储在变量中?
答案 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);
});
答案 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);