gpt4 book ai didi

javascript - Chrome扩展后台页面和内容脚本同步

转载 作者:搜寻专家 更新时间:2023-11-01 04:36:30 25 4
gpt4 key购买 nike

假设我在 Chrome 扩展程序的后台页面中有以下代码。

var opts;
chrome.storage.local.get(options, function(result) {
opts = result[options];
});

chrome.runtime.onMessage.addListener(function(request, sender, response) {
if (request.message === 'getOpts')
response(opts);
});

在我的内容脚本中,我通过消息传递访问 opts

chrome.runtime.sendMessage({'message': 'getOpts'}, function(response) {
console.log(opts);
});

是否可以保证在内容脚本运行之前定义 opts?例如,当浏览器启动时,后台页面会运行,而chrome.storage.local.get 的回调可能会被添加到后台页面的消息队列中。 Chrome 会在注入(inject)内容脚本之前完成该队列的处理吗?

我可以从内容脚本中调用 chrome.storage.local.get,但我的问题更笼统,因为我的后台页面中有额外的异步处理。目前,我的内容脚本会检查后台页面以确保一切准备就绪(使用间隔不断检查),但我不确定是否有必要进行此类检查。

最佳答案

您实际上可以异步回复消息。

chrome.runtime.onMessage.addListener(function(request, sender, response) {
if (request.message === 'getOpts') {
chrome.storage.local.get('options', function(result) {
response(result[options]);
});
return true; // Indicate that response() will be called asynchronously
}
});

chrome.storage 的情况下,这确实是愚蠢的,因为 API 专门设计用于解决在内容脚本中使用 localStorage + Messaging 的迂回性质;您可以直接从内容脚本中查询。

但是在一般的异步处理情况下,你可以推迟回复消息。您只需要从监听器返回一个真值以表明您还没有完成。

关于javascript - Chrome扩展后台页面和内容脚本同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655983/

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