Расширение Chrome, Javascript: получение URL из адресной строки - PullRequest
0 голосов
/ 15 июля 2011

У меня есть расширение, над которым я работаю, у которого есть «всплывающий» значок на панели,
Я посещаю сайт (например, google.com), кнопка нажата, я запускаю этот код во всплывающем окне.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 Ответ

2 голосов
/ 15 июля 2011

Ваш код показывает проблему.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).Когда эта другая функция выполнила свою задачу (например, найти выбранную вкладку), она выполнит предоставленную функцию.В то же время, однако, код, следующий за запросом, будет выполняться регулярно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...