【问题标题】:Gmail Extension, sendMessage to background from page contextGmail 扩展,从页面上下文向后台发送消息
【发布时间】:2014-11-08 10:25:08
【问题描述】:

我正在构建一个扩展以与 Gmail 集成,并通过将 gmail.js 注入页面上下文来与 Gmail 集成,如下所示:https://github.com/KartikTalwar/gmail-chrome-extension-boilerplate/blob/master/content.js

这似乎是利用 Google 嵌入页面的一些全局变量的唯一明显方式。

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

【问题讨论】:

标签: javascript google-chrome google-chrome-extension gmail


【解决方案1】:

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

您可以将其概括为回传答案。

【讨论】:

  • 这是完美的。谢谢!
  • @Xan 你能告诉我如何制作来自页面的脚本来调用带有回调的内容脚本吗?假设我想发送一个 http 请求,并且由于 CORS 错误,我希望扩展程序为我执行此操作。所以我需要在我的应用程序中知道响应是什么......我该怎么做?谢谢!
【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多