簡體   English   中英

未處理的 JavaScript 異常終止 MSAppHost/WWAHost.exe

[英]Unhandled JavaScript exception terminates MSAppHost/WWAHost.exe

<!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異常應中止只為事件而不是整個應用程序的執行上下文。

有沒有辦法防止這種行為?

防止這種行為的最好方法是處理異常 全局異常處理程序通常不受歡迎,除了可能記錄錯誤之外,因為它們不可能處理所有可能的異常,並且只會導致應用程序以未知狀態結束。

如果您無法在相關的某個地方以可靠的方式處理異常,則意味着您不知道問題是什么,並且您的應用程序可能會由於未知狀態而以其他方式開始失敗 - 此時它可能以及完全停止運行。


盡管如此,在 HTML 中,您可以從onerror處理程序return true而不是false以防止異常進一步冒泡。 例如,這將在控制台中記錄錯誤但不顯示未捕獲的錯誤:

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

但這都會記錄錯誤,然后顯示未捕獲的錯誤:

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

您是否嘗試過添加 catch 子句? 這允許您捕獲錯誤而不會使應用程序崩潰。 這將正確處理異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM