Расширение 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);