Answers:
chrome.tabs.query()
像这样使用:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
这要求您chrome.tabs
在扩展清单中请求访问API :
"permissions": [ ...
"tabs"
]
重要的是要注意,“当前选项卡”的定义可能会根据扩展程序的需求而有所不同。
lastFocusedWindow: true
当您要访问用户焦点窗口(通常是最顶部的窗口)中的当前选项卡时,在查询中进行设置是合适的。
设置currentWindow: true
允许您在扩展程序代码当前正在执行的窗口中获取当前选项卡。例如,如果您的扩展程序创建了一个新的窗口/弹出窗口(更改焦点),但仍想从运行扩展程序的窗口访问选项卡信息,则此方法可能很有用。
我选择lastFocusedWindow: true
在此示例中使用,因为Google会指出currentWindow
可能并不总是存在的情况。
您可以使用此处定义的任何属性来进一步优化选项卡查询:chrome.tabs.query
警告!chrome.tabs.getSelected
已弃用。请使用chrome.tabs.query
其他答案中所示的方法。
首先,您必须在manifest.json中设置API的权限:
"permissions": [
"tabs"
]
并存储URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
是未定义的,我应该在另一个问题中提出吗?
其他答案假设您想从弹出脚本或后台脚本中了解它。
如果您想从内容脚本中了解当前URL ,则可以使用标准的JS方式:
window.location.toString()
您可以使用的属性window.location
来访问URL的各个部分,例如主机,协议或路径。
window.location.host
看看Im是否在“ stackoverflow.com”。
match:"<all_urls>"
content_script部分的情况,并且Chrome不推荐<all_urls>。
contentScript.js
而不是在中运行它background.js
。只需将您从URL过滤的所有数据传递到消息中即可background.js
。示例:let message = { type: "fetchVideoDate", id: getVideoId() };
其中getVideoId()
包含的执行window.location.toString()
。否则,您将获得一些chrome://temp_background_file.html
数据。另请注意,有时message
称为request
。
问题是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);
}
该解决方案已经过测试。
在manifest.json中设置API的权限
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
首次加载调用功能。https://developer.chrome.com/extensions/tabs#event-on已激活
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
更改通话功能。https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
获取URL的功能
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
对于使用的用户context menu api
,文档尚不清楚如何获取标签信息。
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
您必须检查一下。
的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);