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

时间:2015-12-13 18:44:32

标签: javascript google-chrome google-chrome-extension try-catch

我正尝试通过浏览器操作通过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..catchwid”的情况。 我知道null条款可能对我的实验有所帮助,但我想了解if这种行为的原因。

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

1 个答案:

答案 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的更多信息,但同样适用于您的情况。