Могут ли фоновые страницы расширений Chrome иметь несколько слушателей? - PullRequest
2 голосов
/ 07 февраля 2011

Я создаю расширение для Chrome и пытаюсь получить данные из твиттера, а затем передать их в мой текст.У меня много проблем с этим.Я могу получить данные с удаленного сайта, но не могу передать их моему скрипту содержимого.У меня есть слушатель, когда я нажимаю значок, используя chrome.extension.onclick.addlistener(functionname);.Это получает данные.Проблема в том, что когда я получаю данные, мне нужно отправить ответ на запрос из моего скрипта контента.Так что я также звоню chrome.extension.Onrequest.addlistener(functioname);.Прежде чем я попытаюсь выяснить, что не так с кодом, разрешено ли иметь 2 слушателя для 2 отдельных событий на той же странице, что и я, или у вас может быть только один слушатель?

Ответы [ 3 ]

2 голосов
/ 02 марта 2016

Я знаю, что это старый сумасшедший вопрос, но я столкнулся с ним, когда столкнулся с проблемой, и хотел бы поделиться, если она будет полезна для кого-то еще.1003 * метод не более одного раза, если у вас есть несколько слушателей.Из документов:

sendResponse: функция для вызова (самое большее один раз), когда у вас есть ответ.Аргумент должен быть любым JSON-ifiable объектом.Если в одном документе несколько слушателей onMessage, то только один может отправить ответ.Эта функция становится недействительной при возврате прослушивателя событий, если только вы не вернете true из прослушивателя событий, чтобы указать, что хотите отправить ответ асинхронно (это будет держать канал сообщений открытым для другого конца до вызова sendResponse).*

0 голосов
/ 22 февраля 2012

Тот факт, что вы создали прослушиватель для события onClick и прослушиватель для события onRequest, не является проблемой. Вы можете сказать, набрав chrome.onClick и chrome.OnRequest в консоли для фоновой страницы; вы увидите, что они являются экземплярами типа 'chrome.Event'.

Если вы подумаете об этом, если бы вы смогли создать только одного слушателя, это значительно уменьшило бы вашу способность написать что-то полезное, поскольку вы могли отвечать только на один из {onrequest, onclick, ontabchange, onconnect, ondisconnect и т. Д.}

0 голосов
/ 08 февраля 2011

Если вы выполните быстрый поиск в Stackoverflow, вы увидите много примеров с кодом того, как отправлять сообщения с фоновой страницы в скрипт содержимого: https://stackoverflow.com/search?tab=relevance&q=content%20script%20background%20page

Для получения дополнительной информации о том, как это сделать, вы можетеследуйте самим документам, у них есть отличные примеры: http://code.google.com/chrome/extensions/messaging.html

Из документации (копия вставки):

content_script.cs

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
 if (request.greeting == "hello")
   sendResponse({farewell: "goodbye"});
 else
   sendResponse({}); // snub them.
});

background.html

chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...