об отправке сообщений между bg.html, popup.html и contentscript.js - PullRequest
4 голосов
/ 10 апреля 2010

В моем расширении, когда кнопка с именем mybuttonl в popup.html щелкнув, он отправляет сообщение "getvar" на contentscript.js, которое в свою очередь отправляет сообщение "I want var1" на background.html, чтобы получить объект с именем var1. (Аналогичным образом устанавливается кнопка с именем mybutton2, за исключением того, что при нажатии она получает объект var2).

Как мне это реализовать?

Более того, я немного запутался в методах chrome.extension.onRequest.addListener и chrome.extension.sendRequest. Может кто-нибудь объяснить, пожалуйста?

1 Ответ

16 голосов
/ 13 апреля 2010

onRequest.addListener и sendRequest являются частью расширенного обмена сообщениями Chrome. Который находится здесь http://developer.chrome.com/extensions/messaging.html

По сути, вы слушаете запрос, используя "onRequest.addListener", который кто-то отправил, вызвав "sendRequest".

В вашем случае вы вставляете « onRequest.addListener » в свой скрипт контента для прослушивания запросов, поступающих из всплывающего окна (используя sendRequest ). А из вашего скрипта контента вы можете вернуть ответ обратно во всплывающее окно, чтобы обработать происходящее. Во всплывающем окне у вас есть прямой доступ к фоновой странице с помощью chrome.extension.getBackgroundPage () .

Если вы хотите, чтобы ваш контент-скрипт также связывался с вашей фоновой страницей (которая не нужна, так как ваши вещи усложняются), вы можете добавить «onRequest.addListener» на вашу фоновую страницу, которая прослушивает только запросы, поступающие от контентный скрипт. Для этого Передача сообщений объясняет это прекрасно. «sender.tab», если true, является скриптом содержимого.

В приведенном ниже примере (без проверки) показано, что я имею в виду при передаче сообщений. Помните, старайтесь делать вещи простыми, а не сложными.

Пример

Popup.html

chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendRequest(tab.id, {method: "fromPopup", tabid: tab.id}, function(response) {
    console.log(response.data);
  });
});

ContentScript.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  if (request.method == "fromPopup") {
    // Send JSON data back to Popup.
    sendResponse({data: "from Content Script to Popup"});

    // Send JSON data to background page.
    chrome.extension.sendRequest({method: "fromContentScript"}, function(response) {
      console.log(response.data);
    });
  } else {
    sendResponse({}); // snub them.
  }
});

BackgroundPage.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  // From content script.
  if (sender.tab) {
    if (request.method == "fromContentScript")
      sendResponse({data: "Response from Background Page"});
    else
      sendResponse({}); // snub them.
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...