Как я могу использовать port.postmessage для отправки информации с фоновой страницы в скрипт контента в расширении Google Chrome - PullRequest
0 голосов
/ 08 февраля 2011

Мне удалось отправить данные с фоновой страницы в скрипт содержимого.но это делается с помощью sendrequest().Мне нужно будет отправлять данные туда и обратно, поэтому я пытаюсь определить правильный синтаксис для использования port.postmessage от фоновой страницы до скрипта контента.Я уже несколько раз читал страницу Google на Сообщения и, похоже, не понимаю.Я даже скопировал код прямо со страницы и протестировал безрезультатно.Все, что я сейчас пытаюсь сделать, - это отправить данные с фоновой страницы в скрипт контента, используя connect вместо sendrequest.Ответ от скрипта контента, о котором я расскажу позже, так как код с этим ответом был главным занятием.Я просто хочу понять процесс один шаг за раз без лишних знаний об отправке ответа обратно.

Я не уверен, что это противоречит правилам этой доски, но может кто-нибудь ПОЖАЛУЙСТА дать мне пример кода для этого (отрывок фоновой страницы и скрипта содержимого, фоновая страница является отправителем).

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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Если вам нужен какой-либо пример открытия порта от расширения до скрипта контента, вот самый простой из возможных.Фон просто открывает порт и отправляет «Hello tab!»через порт, и скрипт контента отправляет сообщение в фоновый режим каждый раз, когда вы нажимаете на веб-страницу.

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

manifest.json:

{
  "name": "TestExt",
  "version": "0.1",
  "background_page": "background.html",
  "content_scripts": [{
    "matches": ["http://localhost/*"],  // same as background.html regexp
    "js": ["injected.js"]
  }],
  "permissions": [
    "tabs"  // ability to inject js and listen to onUpdated
  ]
}

background.html:

<script>
var interestingTabs = {};
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  // same as manifest.json wildcard
  if (changeInfo.url && /http:\/\/localhost(:\d+)?\/(.|$)/.test(changeInfo.url)) {
    interestingTabs[tabId] = true;
  }
  if (changeInfo.status === 'complete' && interestingTabs[tabId]) {
    delete interestingTabs[tabId];
    console.log('Trying to connect to tab ' + tabId);
    var port = chrome.tabs.connect(tabId);
    port.onMessage.addListener(function(m) {
      console.log('received message from tab ' + tabId + ':');
      console.log(m);
    });
    port.postMessage('Hello tab!');
  }
});
</script>

jection.js:

chrome.extension.onConnect.addListener(function(port) {
  console.log('Connected to content script!');
  port.onMessage.addListener(function(m) {
    console.log('Received message:');
    console.log(m);
  });
  document.documentElement.addEventListener('click', function(e) {
    port.postMessage('User clicked on a ' + e.target.tagName);
  }, true);
});
0 голосов
/ 17 февраля 2011

Подробная документация и простые (самые основные) примеры, показанные на странице документации .

Кроме того, быстрый поиск в stackoverflow позволит вам увидеть много похожих вопросов с подробными ответами.

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