每次加载页面时,如何从后台向 Chrome 扩展程序中的弹出窗口发送消息?

用户72840184

我可以通过以下方式将消息从弹出窗口发送到后台:

背景.js

chrome.runtime.onMessage.addListener(
  function(request) {
    alert(request.data.subject);
  }
);

弹出窗口.js

chrome.runtime.sendMessage({
  msg: "something_completed", 
  data: {
      subject: "Loading...",
      content: "Just completed!"
  }
});

警报加载正常,但我需要做相反的事情。我希望后台在加载页面时发送 api 调用并将该 api 调用的结果发送到 popup.js 以便它可以对 DOM 进行更改。当我切换上面的代码时,没有显示警报。我的manifest.json

{
    "name": "example",
    "version": "0.0.1",
    "description": "Chrome Extension's message passing example",
    "browser_action": {
      "default_icon": "images/get_started32.png",
      "default_popup": "popup.html"
    },
    "background": {
      "scripts": ["background.js"]
    },
    "content_scripts":[{
      "matches":["http://*/*", "https://*/*"],
      "js":["popup.js"]
    }],
    "permissions": [
      "background","webRequest","webRequestBlocking","webNavigation","tabs","notifications"
    ],
    "manifest_version": 2
}
哇哦

从技术上讲,chrome.runtime.sendMessage会向包括弹出窗口在内的所有扩展页面发送一条消息,但这不是组织通信的方式。

请注意,弹出窗口仅在显示时运行,因此如果它被隐藏,则无法接收消息。

假设弹出窗口已经可见,解决方案通常是简单地等待后台脚本使用return true.

popup.js 发送一条消息:

chrome.runtime.sendMessage({foo: 'bar'}, response => {
  // use the response here
});

后台脚本:

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg.foo === 'bar') {
    doSomeProcessing(msg).then(sendResponse);
    return true;
  }
});

function doSomeProcessing(msg) {
  return new Promise(resolve => {
    // do something async
    resolve({data: 123});
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Chrome扩展程序在页面操作中显示弹出窗口

如何防止我的Chrome扩展程序中的弹出窗口放大

弹出式窗口中的Chrome扩展程序后台页面

如何缩小Chrome扩展程序的弹出窗口

无法在Chrome扩展程序中从后台页面向内容脚本发送消息

Chrome扩展程序中的数据未从弹出窗口传递到后台

如何从Chrome扩展程序向本机应用发送消息?

Chrome扩展程序:如何在页面加载时运行Javascript(不打开弹出窗口)

将消息从弹出窗口发送到内容脚本-Chrome扩展程序

在Google Chrome浏览器扩展程序弹出窗口中发送异步消息

打开弹出窗口时 Chrome 扩展程序已损坏

如何在Chrome扩展程序中仅显示一次弹出窗口?

如何在Chrome扩展程序中显示弹出式窗口?

如何阅读在线资源并更新Google Chrome扩展程序中的弹出窗口

如何为Chrome扩展程序添加粘性弹出窗口

如何阻止亚马逊上的Chrome扩展程序弹出窗口

如何使Chrome扩展程序弹出窗口可拖动?

如何在Chrome扩展程序弹出窗口上创建“ tail”

页面重新加载chrome扩展消息发送?

当用户在单独的chrome窗口中时,是否可以关闭chrome扩展程序弹出窗口?

从已加载的iframe将消息发送回Chrome扩展程序

Chrome扩展程序消息从弹出窗口传递到内容

如何从Chrome扩展程序中打开的窗口获取背景页面?

Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

Chrome 扩展程序:如何通过单击 html 弹出窗口中的按钮在新选项卡中打开指定链接?

关闭和打开Chrome扩展程序弹出窗口时如何不丢失数据

Chrome扩展程序:从内容到后台的sendMessage从弹出窗口获取响应

Chrome扩展程序:使其在每次加载页面时运行

在 Google Chrome 扩展程序中获取打开的弹出窗口