Изменить значок расширения Chrome

Я новичок в расширениях Google Chrome, и я создал одно для нашего веб-сайта, которое проверяет содержимое страницы, на которой вы находитесь, и на основе этого получает идентификатор сервера (у нас есть веб-ферма с 4 виртуальными машинами). Теперь, используя идентификатор сервера, я не хочу менять значок расширения, чтобы отображать там номер. Я пробовал использовать:

chrome.browserAction.setIcon({
    path : folder + icons[2],
    tabId: tab.id
});

Но я получаю эту ошибку: chrome.browserAction is not available: You do not have permission to access this API. Ensure that the required permission or manifest property is included in your manifest.json.

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


person Richard    schedule 04.06.2013    source источник
comment
У вас есть browser_action, определенный в вашем манифесте? Отсутствие этого в вашем манифесте - единственное, что, как мне кажется, может вызвать такую ​​​​ошибку (за исключением использования версии браузера canary/dev/beta).   -  person apsillers    schedule 04.06.2013
comment
`browser_action: { default_icon: numbers/1green.png, default_popup: index.html }` Это то, что у меня есть..   -  person Richard    schedule 04.06.2013
comment
Я пробовал в своем обычном Chrome в режиме Dev и на Canary.   -  person Richard    schedule 04.06.2013
comment
Где вы пытаетесь запустить этот код? Я ожидаю, что он преуспеет на фоновой странице и потерпит неудачу в сценарии контента. Я не уверен в действиях браузера или всплывающих окнах действий на странице.   -  person apsillers    schedule 04.06.2013
comment
Это действительно в сценарии контента. Я переместил объявление файла в background, но теперь ничего не происходит. к вашему сведению; то, что я хочу сделать здесь, это обновить значок на основе содержимого страницы, которую я посещаю в браузере. Я не выполняю никаких фоновых задач для опроса базы данных или чего-либо еще и отображения результатов.   -  person Richard    schedule 04.06.2013


Ответы (2)


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

Ваш сценарий содержимого должен отправлять сообщение с помощью chrome.runtime.sendMessage, а фоновая страница должна слушайте, используя chrome.runtime.onMessage.addListener:

Сценарий содержания:

if(shouldChangeIcon) {
    // send message to background script
    chrome.runtime.sendMessage({ "newIconPath" : folder + icons[2] });
}

Фоновая страница:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        // read `newIconPath` from request and read `tab.id` from sender
        chrome.browserAction.setIcon({
            path: request.newIconPath,
            tabId: sender.tab.id
        });
    });
person apsillers    schedule 04.06.2013
comment
Хорошо, я могу как-нибудь отследить, что происходит на заднем плане? Сейчас настроил, но значок не меняется. У вас есть background.js, объявленный в background, и myscript.js как content_script. Вещи в myscript.js, которые запускают console.log(), работают, но все тот же значок. - person Richard; 04.06.2013
comment
Возможно, вы могли бы использовать Где читать консольные сообщения из background.js в расширении Chrome? - person apsillers; 04.06.2013

Unchecked runtime.lastError: Icon invalid.

На всякий случай, если кто-то столкнется с вышеуказанной ошибкой при изменении значка browserAction, мне нужно уточнить: поддерживаются не все размеры изображения, но 48x48 является допустимым.

person Iceberg    schedule 07.01.2020