Chrome扩展,Javascript:从地址栏获取URL

Chrome extension, Javascript: getting URL from address bar

本文关键字:地址栏 获取 URL 扩展 Javascript Chrome      更新时间:2023-09-26

我有一个扩展,我正在工作,有一个"弹出"按钮在栏上,
我访问一个站点(例如google.com),按钮被按下,我在popup.html:

中运行这段代码
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
  chrome.tabs.getSelected(null, function(tab) {
    localStorage['url_in_address_bar']=tab.url;
  });
}

但是它不保存google地址,而是保存自己的地址,像这样:"chrome://extensions/" .

我如何让它保存最后一个地址而不是它自己?

您的代码显示了问题。getSelected返回标签作为回调,这意味着回调被执行时,Chrome已经找到所选的标签。这是异步的,稍后执行:

window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
  // 1) request selected tab
  chrome.tabs.getSelected(null, function(tab) {
    localStorage['url_in_address_bar']=tab.url; // 3) selected tab is stored
  });
}

// 2) a tab is created
var saved_email = localStorage['blocker_user_email'];
if (saved_email === undefined ||  saved_email == "a@a.com")
{   
    //self.close();
    chrome.tabs.create({url: '0_register.html'});
} else{
      // self.close();
      chrome.tabs.create({url: '1_options.html'});
}

您可以通过将代码的第二部分放入回调函数来解决这个问题:

window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
  chrome.tabs.getSelected(null, function(tab) {
    localStorage['url_in_address_bar']=tab.url;
    var saved_email = localStorage['blocker_user_email'];
    if (saved_email === undefined ||  saved_email == "a@a.com")
    {   
        //self.close();
            chrome.tabs.create({url: '0_register.html'});
    } else{
          // self.close();
          chrome.tabs.create({url: '1_options.html'});
    }
  });
}

回调函数是作为参数提供给另一个函数(例如getSelected)的函数。当其他函数完成了它的任务(例如查找选定的选项卡),它将执行所提供的函数。然而,与此同时,请求之后的代码将定期执行。