【问题标题】:Why does try..catch not work with chrome.windows.get?为什么 try..catch 不适用于 chrome.windows.get?
【发布时间】:2015-12-13 18:44:31
【问题描述】:

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

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

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

错误:窗体 windows.get(null, function) 的调用与定义 windows.get(integer windowId, optional object getInfo, function callback)不匹配

我尝试使用 try..catch 块并在 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 没有捕捉到“widnull”的情况。 我知道if 子句可能对我的实验有所帮助,但我想了解为什么try 会这样。

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

【问题讨论】:

  • 1.您可以在调用函数 2 之前检查null 之前。您有两个变量widwinId,因此代码不完整或者您有错字。
  • 谢谢。这确实是错字。 if 子句有帮助,但它使代码变得复杂。 try and catch 似乎很简洁,但不知何故不适用于此代码清单。
  • 您的代码中没有任何内容可以阻止重复出现。
  • 好的,既然我读了你的问题,这实际上是有道理的。编辑以突出显示/修复错字,赞成并会回答。

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


【解决方案1】:

答案实际上会很无聊:它确实适用于 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 的更多信息,但同样,这不适用于您的情况。

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多