未处理的JavaScript异常终止MSAppHost / WWAHost.exe

时间:2016-04-28 13:55:00

标签: javascript cordova win-universal-app

<!DOCTYPE html>
<html>
  <head>
    <title>Throw test</title>
  </head>
  <body>
    <button onclick="throw 'does this abort the app'">CRASH</button>
  </body>
</html>

此代码作为通用Windows应用程序(MSAppHost / 3.0)(WWAHost.exe)运行时终止应用程序(退出代码0x3)。有没有办法防止这种行为?

我尝试添加一个窗口onerror处理程序,它不会阻止应用程序终止。

window.onerror = function(e) { return false; }

编辑这是一个运行现有html5应用程序的基于Cordova的Windows 10移动项目。要在每个事件处理程序周围添加try catch,这将是一项令人难以置信的工作量。

编辑在JavaScript中,异常应仅中止事件的执行上下文而不是整个应用程序。

2 个答案:

答案 0 :(得分:1)

  

有没有办法防止这种行为?

防止此行为的最佳方法是处理异常。除了记录错误之外,全局异常处理程序通常不受欢迎,因为它们可能无法处理每个可能的异常,并且只会导致应用程序以未知状态结束。

如果您无法以相关的可靠方式处理异常,则意味着您不知道问题是什么,并且由于未知,您的应用程序可能会以其他方式开始失败国家 - 此时它也可能完全停止运行。

所有这一切,在HTML中,您可以return true处理程序onerror而不是false来阻止异常进一步冒泡。例如,这将在控制台中记录错误,但不显示未捕获的错误:

&#13;
&#13;
$('button').click(function() {
    console.log('a');
    throw "oops";
    console.log('b');
});
window.onerror = function(e) {
    console.log('error', e);
    return true;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>
test
</button>
&#13;
&#13;
&#13;

但这会记录错误,然后显示未被捕获的错误:

&#13;
&#13;
$('button').click(function() {
    console.log('a');
    throw "oops";
    console.log('b');
});
window.onerror = function(e) {
    console.log('error', e);
    //don't return true
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>
test
</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您是否尝试过添加catch子句? 这允许您捕获错误而不会使应用程序崩溃。这将正确处理异常