我正在构建一个与Gmail集成并通过将gmail.js注入页面上下文与Gmail集成的扩展程序,如下所示:https://github.com/KartikTalwar/gmail-chrome-extension-boilerplate/blob/master/content.js
这似乎是利用谷歌嵌入页面的一些全局变量的唯一明显方法。
所以现在,我需要回到扩展的一些功能。在正常情况下(从内容脚本操作),我会向后台脚本发送一条消息,但是甚至可以从选项卡本身的上下文中发送消息吗?
答案 0 :(得分:6)
页面上下文脚本确实无法使用Chrome API 但是,它可以调度内容脚本可以捕获的DOM事件。
文档here中有一个示例。除了使用window.postMessage
之外,您还可以dispatch custom events。
因此,您需要使内容脚本像页面上下文和后台之间的代理一样工作。这些方面的东西:
// 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);
您可以对此进行概括以传回答案。
答案 1 :(得分:2)
为了扩展这一点,在使用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);