О чем речь ?

При разработке расширений для Chrome не очевиден способ взаимодействия page-context (скрипты находящиеcя в DOM) и расширением, его content и background скриптами.

Как общаются content и background скрипты описано в документации по созданию расширений для хрома.

Зачем такая коммуникация?

Контент скрипты имеют доступ к DOM, делят его с кодом на странице, но не могут взаимодействовать с js кодом посредством его прямого вызова и модификации.

Иногда все же нужно отправить данные из скрипта страницы в расширение. В частности у меня такая ситуация возникла при работе с VPAID скриптами.

Способ 1. Более универсальный.

// Content script
//Listen for the event
window.addEventListener("PassToBackground", function(evt) {
  chrome.runtime.sendMessage(evt.detail);
}, false);

// Page context
var message = {/* whatever */};
var event = new CustomEvent("PassToBackground", {detail: message});
window.dispatchEvent(event);

Схема взаимодействия получается такая

main.js
 |
 | window.postMessage(); // window.dispatchEvent()
 |
 V
content.js //window.addEventListener("message", callback, false);
 |
 | chrome.runtime.sendMessage();
 |
 V
background.js //chrome.runtime.onMessage.addListener(callback);

Способ 2. Более безопасный.

Из документации google

Ссылки

Содержание: