我正在测试chrome扩展程序。
它应该如何工作,它会阻止除Google(或其他域)之外的所有请求
问题是当您访问Google.com时,Google发出了后续请求,但这些请求被阻止了,所以我添加了removeListener函数。
我现在遇到的问题是在删除侦听器后将其重新添加。我以为会在窗口对象完成加载后发生,但是我不确定我是否正在正确考虑。
如何重新添加此侦听器,或者还有其他方法可以解决我没有想到的问题?谢谢。
function create<T extends new(...args: any[]) => any>(
cls: T, ...args: ConstructorParameters<T>): InstanceType<T> {
return new cls(...args);
}
interface BarConstructor<T, C> {
new(a: T, b: string): C;
}
class BarImpl<T> {
constructor(a: T, b: string) {}
}
function Bar<T>(): BarConstructor<T, BarImpl<T>> {
return BarImpl;
}
let b = create(Bar(), "asdf", "a"); // OK because Bar() by itself implies Bar<{}>(),
// and "asdf" is assignable to {}
// you can turn it into an error by having `never` as default for T like this
// function Bar<T = never>()
let c = create(Bar<number>(), "asdf", "a"); // error as expected
let d = create(Bar<number>(), 20, "a"); // OK
答案 0 :(得分:0)
基于@wOxxOm的评论,我可以通过在webRequest完成后重新初始化侦听器来使其正常工作。这就是它的样子……
var blocked_domains = [
"*://*/*"
];
var requestGuard = function(details) {
if (details.url == "https://www.google.com/") {
chrome.webRequest.onBeforeRequest.removeListener(requestGuard)
return {cancel: false };
} else {
return {cancel: true };
}
}
chrome.webRequest.onBeforeRequest.addListener(
requestGuard, {urls: blocked_domains}, ["blocking"]
)
chrome.webNavigation.onCompleted.addListener(function() {
chrome.webRequest.onBeforeRequest.addListener(
requestGuard, {urls: blocked_domains}, ["blocking"]
)
})
它可以写得更好,有一些重复代码,但是可以用