1

Мой вопрос довольно прост, и я просто хочу выяснить, как это сделать.Функция вызова скрипта на chrome.browserAction.onClicked

Текущая итерация моего расширения chrome вводит DIV в веб-страницу с помощью кнопки, которая при нажатии выполняет функцию.

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

ответ

10

Да, контактирование сценарьего содержимого с помощью кнопки действия браузера или страницы осуществляются с помощью сообщений, отправленных туда и обратно между фоновым сценарием и сценарием контента (ов)

Первого шага: Говорите фоновый скрипт, что делать на кнопку/pageAction browserAction нажмите

chrome.browserAction.onClicked.addListener(function(tab) { 
    ... 
}); 

Шаг 2: (! ведь любой код прослушивания) Внутри слушателя browserAction.onClicked события вы можете отправить сообщение для скрипта содержания:

chrome.tabs.sendMessage(tab.id, {<YOURMESSAGEPAYLOAD>}); 

Шаг 3: Внутри скрипта содержимого, необходимо добавить прослушиватель для входящих сообщений

chrome.runtime.onMessage.addListener(function(request, sender, callback) { 
    // request contains the YOURMESSAGEPAYLOAD sent above as a Javascript object literal 
}); 

Вы также можете пойти другим путем круглые и отправлять сообщения от скрипта содержимого на фоне сценария с помощью следующих внутри содержание сценария

chrome.runtime.sendMessage({<YOURMESSAGEPAYLOAD>}); 

, а затем использовать onMessage слушателя внутри фонового сценария так же, как упоминалось выше.

+0

В документации не указано, но я предполагаю, что аргумент 'tab' для' onClicked' является активной вкладкой. Это позволит вам получить 'tab.id', не требуя' query'. – Teepeemm

+0

Действительно ... Я изменил пример соответственно – devnull69

+0

Я знаю, что это немного поздно и спасибо миллион за этот ответ, но это addListener, а не addEventListener. –

0

devnull69 верен, вам необходимо использовать передачу сообщений. Также рассмотрите возможность проверки chromeps. Это небольшая библиотека pubsub, которую я написал для chrome-расширений. Удаляет много накладных расходов при написании кода передачи сообщений.

Смежные вопросы