Chrome扩展程序,Javascript:从地址栏获取网址

时间:2011-07-15 17:22:19

标签: javascript tabs google-chrome-extension

我有一个我正在研究的扩展,它在栏上有一个“弹出式”putton,
我访问了一个网站(例如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/"

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

1 个答案:

答案 0 :(得分:2)

您的代码显示了问题。 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)。当其他功能完成其任务(例如,查找选定选项卡)时,它将执行提供的功能。然而,与此同时,请求之后的代码将定期执行。