Динамическое обновление кнопки расширения - требуется вдохновение - PullRequest
42 голосов
/ 17 января 2012

Я создаю расширение, где я хочу иметь возможность добавлять обозначение к кнопке расширения, когда расширение в коде было активировано. Я надеялся, что смогу добавить текст к кнопке расширения (вверху справа)

Вот простой сценарий. Допустим, мое расширение отслеживает просмотр и получает URL-адрес вкладки, в моем расширении у меня есть список доменов, за которыми нужно следить.

Следите за этими доменами www.website1.com www.website2.com

Если пользователь посещает домен в списке отслеживания, я хочу как-то указать это, добавив куда-нибудь текст - я надеялся в правом верхнем углу браузера, где находятся кнопки расширений. Я действительно не хочу использовать окно уведомлений, поскольку я хочу что-то ненавязчивое. Текст, который я хочу отобразить, будет состоять из нескольких букв, но различаться для разных URL.

У кого-нибудь есть вдохновение?

Спасибо

Ответы [ 3 ]

90 голосов
/ 17 января 2012

Вы можете изменить значок расширения следующим образом:

chrome.browserAction.setIcon({path: icon});

Существует также «значок» - небольшая коробка над значком расширения, который показывает, т.е. количество непрочитанных сообщений в расширении gmail. Вы можете манипулировать им так:

chrome.browserAction.setBadgeBackgroundColor({color:[190, 190, 190, 230]});
chrome.browserAction.setBadgeText({text:"?"});

Также возможно динамически генерировать значок на элементе canvas и затем отображать его так:

chrome.browserAction.setIcon({imageData:canvasContext.getImageData(0, 0, canvas.width,canvas.height)});
1 голос
/ 25 июля 2012

Вы также можете установить тайм-аут, чтобы проверять изменения в системе каждые x минут, а затем обновлять de badge.

На моем добавочном номер у меня есть счетчик задач, вызываемый внутри функции уведомления.Что-то вроде:

$.getJSON(
    "http://mydomain/notifications?ajax=1&callback=?",
    function(data){
        var result = data.retorno;
        if(result.length > 0){
            var totalItens = result[0].total
        } else {
            var totalItens = 0;
        }
        chrome.browserAction.setIcon({path: '19.png'});
        chrome.browserAction.setBadgeText({text:''+totalItens+''});

        for(var i=0; i<result.length; i++){

          var imagem = 'http://mydomain/myimage';
          var titulo = 'mytitle';
          var desciption = 'mydescription';

          var urlNot = 'http://mydomain/mypageOnclick';

          var not = new Notifier(urlNot);
          not.Notify(
              imagem,     // The image.
              titulo,     // The title.
              desciption  // The body.
          );

        }

    }
);
0 голосов
/ 05 апреля 2019

tl; dr: вызвать его из background.js

Я гуглил этот комментарий, потому что пытался вызвать функцию chrome.browserActions из моего скрипта содержимого

Он доступен только для сценариев, которые выполняются как часть расширения Chrome, так как content_scripts такие же, как и клиентские сценарии, к которым вам нужно обращаться через Chrome. * Api's

и чтобы исправить некоторые дополнительные головные боли, которые у меня были, вызов текста setBadge должен выглядеть следующим образом:

chrome.browserAction.setBadgeText({text: 'ASDF'});

Вы можете поместить столько символов, сколько хотите, но только 4 или около того появятся. Я зациклился на том, каким должно быть свойство объекта.

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