gpt4 book ai didi

javascript - chrome...addListener,如何等待 chrome.storage.sync.get?

转载 作者:行者123 更新时间:2023-11-29 19:09:44 25 4
gpt4 key购买 nike

我的扩展正在修改一些 URL。它工作正常,但现在我想检查是否在设置中启用了修改。

chrome.webRequest.onBeforeRequest.addListener
(
modifyUrl,
{urls: ['http://somewebsite/*'], types: ['main_frame']},
['blocking']
);

问题是我不知道如何等待这个值。我必须在退出 modifyUrl 之前获取设置。这可能吗?如果这是 C#,我可能会在调用 sync.get 之后使用 ManualResetEvent 或其他东西。

function modifyUrl(details)
{
chrome.storage.sync.get("someSetting",
function (data)
{
//I can get the setting here
}
);

//how to know the setting here?
if(enabled in the setting)
{
return {redirectUrl: some different url};
}
}

最佳答案

请参阅 Returning Chrome storage API value without function 以获取详细说明。

简而言之,blocking onBeforeRequest 事件是同步的,因此它不能依赖异步函数(例如所有 chrome.* API 回调)来派生其返回值。

将数据缓存在一个全局变量中,并在其他地方更改时使用 chrome.storage.onChanged 更新它,如果您使用 chrome.storage.sync(它在配置文件同步时更新),这很容易发生。

var settingEnabled; // a global variable
chrome.storage.sync.get("someSetting", function (data) {
var settingEnabled = data.someSetting;
});

chrome.webRequest.onBeforeRequest.addListener(
modifyUrl,
{urls: ['http://somewebsite/*'], types: ['main_frame']},
['blocking']
);

function modifyUrl(details) {
if (settingEnabled) {
return {redirectUrl: 'http://example.com'};
}
}

chrome.storage.onChanged.addListener(function(changes, area) {
if (area == "sync" && "someSetting" in changes) {
settingEnabled = changes.someSetting.newValue;
}
});

当然,如果您想完全禁用处理,只需分离监听器即可:

function toggleListener(enable) {
if (enable) {
chrome.webRequest.onBeforeRequest.addListener(
modifyUrl,
{urls: ['http://somewebsite/*'], types: ['main_frame']},
['blocking']
);
} else {
chrome.webRequest.onBeforeRequest.removeListener(modifyUrl);
}
}

chrome.storage.onChanged.addListener(function(changes, area) {
if (area == "sync" && "someSetting" in changes) {
toggleListener(changes.someSetting.newValue);
}
});

chrome.storage.sync.get("someSetting", function (data) {
toggleListener(data.someSetting);
});

另一种有趣的方法是在更新时 re-attach onBeforeRequest inside storage.get callback

关于javascript - chrome...addListener,如何等待 chrome.storage.sync.get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948874/

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