<!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中,异常应仅中止事件的执行上下文而不是整个应用程序。
答案 0 :(得分:1)
有没有办法防止这种行为?
防止此行为的最佳方法是处理异常。除了记录错误之外,全局异常处理程序通常不受欢迎,因为它们可能无法处理每个可能的异常,并且只会导致应用程序以未知状态结束。
如果您无法以相关的可靠方式处理异常,则意味着您不知道问题是什么,并且由于未知,您的应用程序可能会以其他方式开始失败国家 - 此时它也可能完全停止运行。
所有这一切,在HTML中,您可以return true
处理程序onerror
而不是false
来阻止异常进一步冒泡。例如,这将在控制台中记录错误,但不显示未捕获的错误:
$('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;
但这会记录错误,然后显示未被捕获的错误:
$('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;
答案 1 :(得分:0)
您是否尝试过添加catch子句? 这允许您捕获错误而不会使应用程序崩溃。这将正确处理异常