gpt4 book ai didi

javascript - 为什么 try..catch 不适用于 chrome.windows.get?

转载 作者:行者123 更新时间:2023-11-29 14:44:42 24 4
gpt4 key购买 nike

我正在尝试通过浏览器操作通过 Chrome 扩展程序打开一个窗口。

var wid = null;
chrome.windows.get(wid, function(chromeWin) {
chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) {
wid = chromeWin.id;
}
);
});

为了防止窗口的多个副本,我正在尝试检查窗口 ID。但是如果第一次使用,可以理解,它会抛出错误,因为 widnull

Error: Invocation of form windows.get(null, function) doesn't match definition windows.get(integer windowId, optional object getInfo, function callback)

我尝试使用 try..catch block ,在 catch 中我正在处理“wid is null”的情况。

try {
var wid = null;
chrome.windows.get(wid, function(chromeWin) {
chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) {
wid = chromeWin.id;
}
);
});
}
catch(error) {
chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) {
wid = chromeWin.id;
}
);
}

但是 try..catch 没有捕捉到“wid is null”的情况。 我知道 if 子句可能对我的实验有帮助,但我想了解为什么 try 会这样。

为什么 try..catch 没有缓存错误,我如何在 Chrome 中打开没有副本的窗口?

最佳答案

答案实际上会相当无聊:它确实用于由 Chrome API 执行的调用验证,因为这是同步发生的:

try {
var wid = null;
chrome.windows.get(wid, function(chromeWin) {
console.log("This should never be visible.");
});
} catch(e) {
console.log("Error caught!");
console.warn(e);
}

这会捕获错误(并将其显示为警告)。所以你原来的问题一定是在其他地方(代码的另一部分,没有正确地重新加载代码,诸如此类)。


我原来的观点是 Chrome 的异步处理中发生了一些错误。这不是此错误,而是 chrome.runtime.lastError 报告的错误。如果您不检查该值,并且出现错误,它会引发无法捕获的异常,因为它发生在原始调用之后并且在您的回调之外。

更多相关信息here ,但同样,这不适用于您的情况。

关于javascript - 为什么 try..catch 不适用于 chrome.windows.get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254878/

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