Проблема изменения значка расширения Chrome - PullRequest
2 голосов
/ 08 февраля 2012

Я разрабатываю расширение для Chrome, и у меня странная проблема со сменой значков на лету.

В моем popup.html у меня есть кнопка, нажав на которую, я хочу изменить значок расширения в браузере. Например. от цветного до черно-белого (когда приложение неактивно).

Итак, функция, которая отвечает за это:

    function toggleActivated(){
        localStorage.isActive = toBool(localStorage.isActive) ? false : true;
        $('#activate-disactivate span').text(toBool(localStorage.isActive) == false ? 'Включить' : 'Выключить');
        chrome.browserAction.setIcon({path: toBool(localStorage.isActive) ? '48.png' : '48_bw.png'});
        //window.close();
     }

Но проблема в том, что я хочу закрыть всплывающее окно после изменения значка. Если я использую window.close() в конце - тогда значок не изменяется, но если он закомментирован - тогда значок меняется отлично.

Почему существует конфликт между chrome.browserAction.setIcon() и window.close()?

Ответы [ 2 ]

2 голосов
/ 08 июля 2013

Я знаю, что это старо, но у меня была та же проблема, и Авраам был прав, когда сказал, что chrome.browserAction.setIcon вызывается асинхронно. Но я не думаю, что установка тайм-аута - лучший ответ.

Если вы посмотрите документацию setIcon , вы увидите, что этот метод принимает функцию обратного вызова в качестве параметра. Вот где вы должны позвонить window.close(). Как это:

chrome.browserAction.setIcon({ path: icon_path }, function() {
    window.close();
});

UPDATE: Как указано в комментарии ниже niraj.nijju , вы можете передать параметр tabId в функцию setIcon , чтобы ограничить область изменения.

2 голосов
/ 08 февраля 2012

Звучит так, как будто chrome.browserAction.setIcon запускается асинхронно, но всплывающее окно закрывается до завершения. Вы можете попробовать добавить 500ms setTimeout перед закрытием.

Вы также должны подать отчет об ошибке на new.crbug.com .

...