我正尝试通过浏览器操作通过Chrome扩展程序打开一个窗口。
render
为了防止Window的多个副本,我试图检查窗口ID。但如果第一次使用,可以理解,它会引发错误,因为var wid = null;
chrome.windows.get(wid, function(chromeWin) {
chrome.windows.create({'url': 'https://google.com'}, function(chromeWin) {
wid = chromeWin.id;
}
);
});
是wid
。
错误:调用窗体windows.get(null,function)与定义windows.get(整数windowId,可选对象getInfo,函数回调)不匹配
我尝试使用null
阻止,并且我正在处理“try..catch
wid
”案例。
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
”的情况。 我知道null
条款可能对我的实验有所帮助,但我想了解if
这种行为的原因。
为什么try
没有缓存错误?如何在Chrome中打开没有副本的窗口?
答案 0 :(得分:2)
答案实际上是相当无聊的: 用于Chrome API执行的调用验证,因为这会同步发生:
section .text
...
message: db 'hello world!',0x00
...
mov rax,SYSCALL_WRITE
mov rdi,STDOUT
mov rsi,message
mov rdx,13
syscall
这会捕获错误(并将其显示为警告)。因此,您的原始问题必须在其他地方(代码的另一部分,而不是正确地重新加载代码,等等)。
我原来的观点是Chrome的异步处理中发生了一些错误。这是不此错误,而是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);
}
报告的错误。如果您没有检查该值,并且出现错误,则会引发无法捕获的异常,因为它发生在原始调用之后和回调之外。
有关here的更多信息,但同样适用于您的情况。