gpt4 book ai didi

javascript - Google Closure 在 Chrome 扩展编译期间需要 RequestFilter 和 BlockingResponse 类型。如何创建这样的类型?

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

我在 Google Closure 编译器中编译 chrome.webRequest.onBeforeRequest.addListener 代码行时遇到问题。

我从示例 https://developer.chrome.com/extensions/samples.html#12a7bf1490a26359eadf10917e37c5b9 中的 CatBlock 扩展中获取了代码示例并添加一些编译器参数:

// ==ClosureCompiler==
// @output_file_name extension.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @externs_url http://closure-compiler.googlecode.com/git/contrib/externs/chrome_extensions.js
// ==/ClosureCompiler==

chrome.webRequest.onBeforeRequest.addListener(
function(info) {
console.log("Cat intercepted: " + info.url);
// Redirect the lolcal request to a random loldog URL.
var i = Math.round(Math.random() * loldogs.length);
return {redirectUrl: loldogs[i]};
},
// filters
{
urls: ["https://i.chzbgr.com/*"],
types: ["image"]
},
// extraInfoSpec
["blocking"]);

Closure Compiler 引发两个 JSC_TYPE_MISMATCH 警告,并需要 BlockingResponseRequestFilter 类型。根据API引用https://developer.chrome.com/extensions/webRequest.html它们都是对象,但是为什么编译器拒绝我传递的对象?

我研究了 chrome_extensions.js,它有自己的 BlockingResponse 和 RequestFilter 类型的构造函数,但浏览器没有它们。

我还尝试将此对象分配给变量并使用注释定义类型。

/** @type {!BlockingResponse} response */
var response = {redirectUrl: loldogs[i]};

/** @type {!RequestFilter} filter */
var filter= {urls: ["https://i.chzbgr.com/*"], types: ["image"]};

这没有帮助,而且似乎不是正确的方法。

有人可以解释一下我做错了什么吗?

提前非常感谢。

最佳答案

要删除警告,您需要输入强制转换返回值:

// ==ClosureCompiler==
// @output_file_name extension.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @externs_url http://closure-compiler.googlecode.com/git/contrib/externs/chrome_extensions.js
// ==/ClosureCompiler==

chrome.webRequest.onBeforeRequest.addListener(
function(info) {
console.log("Cat intercepted: " + info.url);
// Redirect the lolcal request to a random loldog URL.
var i = Math.round(Math.random() * loldogs.length);
return /** @type {!BlockingResponse} */ ({redirectUrl: loldogs[i]});
},
// filters
/** @type {!RequestFilter} */
({
urls: ["https://i.chzbgr.com/*"],
types: ["image"]
}),
// extraInfoSpec
["blocking"]);

注意额外的括号

对于这种用法,如果 extern 指定返回类型为 BlockingResponse|Object.<string,*> 会更好。 ,但我们需要为此在闭包编译器项目中提交一个问题。

关于javascript - Google Closure 在 Chrome 扩展编译期间需要 RequestFilter 和 BlockingResponse 类型。如何创建这样的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575421/

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