我正在尝试创建一个返回当前标签页面的函数:
function tabURL() {
var url="";
chrome.tabs.getSelected(null, function(tab) {url = tab.url;});
return url;
}
当我使用时:
chrome.tabs.getSelected(null, function(tab) {alert(tab.url);});
Chrome会显示该网址,但如果我在Chrome控制台中使用我的功能,则该功能会返回“”。
有没有办法将tab.url传递给变量然后返回这个变量?
答案 0 :(得分:6)
chrome.tabs.getSelected
异步。这意味着当调用回调函数时,return url
“已经发生”。
你有两种方法可以达到预期的效果。
正确重写代码,正确实现异步方面(具体细节取决于扩展程序的实现)。
请注意,自{16}以来,getSelected
已被deprecated替换为chrome.tabs.query
。
使用chrome.tabs.onUpdated
(添加tabID + URL),chrome.tabs.onRemoved
(删除过时的条目)和chrome.tabs.onActivated
(设置当前活动标签)维护当前网址的哈希值)。
代码2:
// Our hash
var tabIdToURL = {};
var currentTabId = -1;
// Add changes to the hash (tab creation, tab's page load)
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
tabIdToURL[tabId] = tab.url; // also available as tab.id and changeInfo.url
});
// Remove entries from closed tabs
chrome.tabs.onRemoved.addListener(function(tabId) {
delete tabIdToURL[tabId];
});
// Set the ID of the current active tab
chrome.tabs.onActivated.addListener(function(activeInfo) {
currentTabId = activeInfo.tabId;
});
// Usage, based on the question's function
function getURL() {
return tabIdToURL[currentTabId] || '';
}