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

IT技术 javascript google-chrome google-chrome-extension gmail
2021-01-15 03:48:43

我正在构建一个扩展以与 Gmail 集成并通过将 gmail.js 注入页面上下文来与 Gmail 集成,如下所示: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);

您可以对此进行概括以将答案传回。

@Xan 你能告诉我如何让来自页面的脚本通过回调调用内容脚本吗?假设我想发送一个 http 请求,并且由于 CORS 错误,我希望扩展程序为我做这件事。所以我需要在我的应用程序中知道响应是什么......我该怎么做?谢谢!
2021-03-14 03:48:43
太棒了。谢谢!
2021-03-16 03:48:43

稍微扩展一下,在使用 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);