gpt4 book ai didi

javascript - 在没有监听器的情况下将消息从 background.js 发送到 popup.js

转载 作者:行者123 更新时间:2023-11-30 08:35:15 26 4
gpt4 key购买 nike

我有一个很长的任务正在 background.js 中运行,我想在完成后向 popup.js 发送一条消息。但是,如果发送消息时页面 Action 还没有被点击,则popup.js中的监听器还没有注册,就不会接收到消息。

我可以改为从 popup.js 发送消息并请求后台任务的结果作为响应。但是,不能保证任务会在那个时间点完成。

我看到的唯一解决方案是将两者结合起来:在两个文件中设置一个监听器并来回发送消息,比如:“如果你能听到我的话,这就是结果!”和“我现在可以听到了!如果你完成了,请把结果发给我。”但是,对于这样一个简单的任务,此解决方案似乎过于复杂。

那么,是不是有一些地方background.js 可以放置popup.js 自行检索的结果?

最佳答案

  1. 将其存储在持久后台页面中的一个全局变量,其用途是officially discouraged出于内存效率的明显原因。

    背景.js:

    var status;

    popup.js,方法一,异步,首选:

    chrome.runtime.getBackgroundPage(function(bg) {
    displayStatus(bg.status);
    });

    popup.js,方法二,同步:

    if (chrome.extension.getBackgroundPage().status) {
    displayStatus(bg.status);
    });
  2. 使用 chrome.storage APIlocalStorage API (后者将所有内容都字符串化,但由于是同步的,您的代码会更简洁一些)。

  3. 使用正常的 sendMessage 通信,没有什么太复杂的:

    背景.js:

    var taskCompleted = false;

    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    if (message.request == "checkStatus") {
    sendResponse({done: taskCompleted});
    }
    });

    .................

    if (taskCompleted) {
    chrome.runtime.sendMessage({done: true});
    }

    弹出.js:

    chrome.runtime.sendMessage({request: "checkStatus"}, function(response) {
    if (response.done) {
    doSomething();
    }
    });

    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    if (message.done) {
    doSomething();
    }
    });

关于javascript - 在没有监听器的情况下将消息从 background.js 发送到 popup.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com