Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmail扩展,从页面上下文向后台发送消息_Javascript_Google Chrome_Google Chrome Extension_Gmail - Fatal编程技术网

Javascript Gmail扩展,从页面上下文向后台发送消息

Javascript Gmail扩展,从页面上下文向后台发送消息,javascript,google-chrome,google-chrome-extension,gmail,Javascript,Google Chrome,Google Chrome Extension,Gmail,我正在构建一个与Gmail集成的扩展,并通过将Gmail.js注入页面上下文来与Gmail集成,如下所示: 这似乎是利用谷歌在页面上嵌入的一些全局信息的唯一明显方式 现在,我需要回到扩展的一些功能上。在正常情况下(通过内容脚本操作),我会向后台脚本发送消息,但从选项卡本身的上下文中也可以发送消息吗?页面上下文脚本确实不能使用Chrome API。 但是,它可以调度可由内容脚本捕获的DOM事件 文档中有一个示例。除了使用window.postMessage,您还可以 因此,您需要使内容脚本像页面上

我正在构建一个与Gmail集成的扩展,并通过将Gmail.js注入页面上下文来与Gmail集成,如下所示:

这似乎是利用谷歌在页面上嵌入的一些全局信息的唯一明显方式


现在,我需要回到扩展的一些功能上。在正常情况下(通过内容脚本操作),我会向后台脚本发送消息,但从选项卡本身的上下文中也可以发送消息吗?

页面上下文脚本确实不能使用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);

不清楚你在问什么。对不起……这有更多的细节:啊哈,现在我明白了。您需要从页面上下文中传递您的背景信息。这非常完美。谢谢@Xan您能告诉我如何制作来自页面的脚本,通过回调调用内容脚本吗?假设我想发送一个http请求,由于CORS错误,我想让扩展为我这样做。所以我需要在我的应用程序中知道响应是什么。。。我该怎么做?谢谢