Javascript Chrome扩展:如何有条件地阻止和取消阻止请求?
我想有条件地为请求块添加和删除一个侦听器,但当我删除该侦听器时,会得到一个无限循环,站点将不会加载anmyore。我正在使用存储器和一个按钮将状态设置为true of false,并在为true时添加侦听器,当为false时应删除侦听器Javascript Chrome扩展:如何有条件地阻止和取消阻止请求?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我想有条件地为请求块添加和删除一个侦听器,但当我删除该侦听器时,会得到一个无限循环,站点将不会加载anmyore。我正在使用存储器和一个按钮将状态设置为true of false,并在为true时添加侦听器,当为false时应删除侦听器 chrome.storage.onChanged.addListener(function (changes, namespace) { for (var key in changes) { var storageChange = changes[k
chrome.storage.onChanged.addListener(function (changes, namespace) {
for (var key in changes) {
var storageChange = changes[key];
console.log('Storage key "%s" in namespace "%s" changed. ' +
'Old value was "%s", new value is "%s".',
key,
namespace,
storageChange.oldValue,
storageChange.newValue);
}
chrome.storage.sync.get('status', function (data) {
chrome.webRequest.onBeforeRequest.addListener(
removeJS,
{
urls: ["https://devtest.com*"],
types: ["script"]
},
["blocking"]);
function removeJS() {
if (data.status === true) {
return {
cancel: true,
}
}
}
if (data.status === false) {
chrome.webRequest.onBeforeRequest.removeListener(removeJS);
}
});
});
我不知道我所指的回调是否正确。也许这就是问题所在,但我已经尝试了很多解决方案。1)在另一个函数中声明removeJS会使它在每次运行get()时都成为一个新的函数对象引用,因此removeListener()无法工作,因为它需要您不再拥有的旧引用。您应该在全局上下文中声明removeJS,以便其对象引用保持不变。2) 不需要chrome.storage.sync.get,因为您可以直接使用changes.status.newValue。1)在另一个函数中声明removeJS会使它在每次get()运行时都成为新的函数对象引用,因此removeListener()将无法工作,因为它需要您不再拥有的旧引用。您应该在全局上下文中声明removeJS,以便其对象引用保持不变。2) 不需要chrome.storage.sync.get,因为您可以直接使用changes.status.newValue。