Расширение Gmail, отправка сообщения в фон из контекста страницы

Я создаю расширение для интеграции с Gmail и интеграции с Gmail, внедряя gmail.js в контекст страницы, как показано здесь: https://github.com/KartikTalwar/gmail-chrome-extension-boilerplate/blob/master/content.js

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

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

2 ответа

Решение

Скрипт контекста страницы не может использовать Chrome API.
Однако он может отправлять события DOM, которые могут быть перехвачены скриптом содержимого.

Вот пример в документации здесь. Помимо использования window.postMessageВы можете отправлять пользовательские события.

Итак, вам нужно, чтобы ваш контент-скрипт работал как прокси между контекстом страницы и фоном. Что-то вроде этого:

// 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);

Вы можете обобщить это, чтобы передать ответ.

Просто немного подробнее об этом при использовании gmail.js, чтобы получить сообщение от main.js к вашей странице расширения, вы должны использовать ваш контент-скрипт в качестве посредника. Надеюсь, эта диаграмма проиллюстрирует.

main.js
 |
 | window.postMessage();
 |
 V
content.js //window.addEventListener("message", callback, false);
 |
 | chrome.runtime.sendMessage();
 |
 V
background.js //chrome.runtime.onMessage.addListener(callback);
Другие вопросы по тегам