Почему значок действия браузера по умолчанию снова появляется после применения пользовательского значка?

У меня странная проблема со значком действия браузера в Chrome. В манифесте определен значок по умолчанию для действия браузера. Значок отображается правильно. Затем на фоновой странице при некоторых условиях я вызываю:

chrome.browserAction.setIcon({path:"green_32.png", tabId:request.tabId});

Этот значок на мгновение мигает, а затем возвращается к значку по умолчанию. Активная вкладка и ее идентификатор, переданный setIcon, остаются неизменными на протяжении всего процесса.

Может ли кто-нибудь предложить идею, почему это может произойти?


person Stan    schedule 03.10.2012    source источник
comment
Я сделал небольшое расширение, чтобы проверить это. Он периодически меняет значок действия браузера, и все работает нормально: dl.dropbox.com /u/8989748/catExtension.zip . Так что ваша проблема не в chrome.browserAction.setIcon, вам нужно указать некоторые подробности. Попробуйте воспроизвести вашу ошибку на моем минимальном примере.   -  person Konrad Dzwinel    schedule 03.10.2012
comment
@KonradDzwinel, ваше расширение работает, спасибо. У меня тоже работает - в отношении установки значка, но потом он странно меняется обратно - это был вопрос, и вы правы, что было что-то более важное, чего я не мог понять до последней минуты ;-). Только сейчас я получил это и собираюсь опубликовать ответ.   -  person Stan    schedule 03.10.2012
comment
Я рад, что вы решили это. Спасибо за публикацию такого исчерпывающего ответа, эта информация может пригодиться однажды. Я согласен, что это должно быть задокументировано. Сообщите об этом на crbug.com.   -  person Konrad Dzwinel    schedule 03.10.2012


Ответы (1)


Причина, по которой значок каждый раз сбрасывался в состояние по умолчанию, заключается в том, что я вызывал setIcon до загрузки вкладки и перехода в состояние "complete".

Думаю, должна быть некоторая информация об этом в документации на вкладках или на действия браузера, но я не нашел его: значок по умолчанию фактически применяется - по дизайну - к конкретную страницу после завершения ее загрузки. Я переместил вызов setIcon в обработчик tabs.onUpdated, и теперь пользовательский значок сохраняется.

Это противоречит моему прежнему пониманию того, что значок действия браузера устанавливается для каждой вкладки независимо от страницы, загруженной на вкладку, и ее состояния.

@KonradDzwinel любезно предоставил простое расширение для проверки случая (посмотрите на комментарии). Я изменил его скрипт background.js, чтобы продемонстрировать это поведение:

chrome.browserAction.onClicked.addListener(function(tab)
{
  chrome.browserAction.setIcon({path: 'gfx/icon2.png', tabId: tab.id});
});

Чтобы воспроизвести это поведение, на любой вкладке нажмите значок действия браузера, чтобы изменить его. Затем обновите страницу. В результате значок действия браузера сбрасывается до значения по умолчанию.

Если такое поведение объясняется в какой-то документации, пожалуйста, напишите об этом в комментариях, и я обновлю ответ. Из того, что я прочитал до сих пор, я был убежден, что значок по умолчанию устанавливается для новой вкладки во время ее создания, а затем любые изменения в нем находятся исключительно под контролем расширения.

person Stan    schedule 03.10.2012
comment
благодарю вас. та же проблема. был. в документации написано: Automatically resets when the tab is closed.. :( - person befzz; 16.06.2015