簡體   English   中英

發生錯誤后,有沒有辦法“重新初始化”JavaScript?

[英]Is there a way to “re-initialize” JavaScript after an error occurred?

我們目前正在使用以下代碼來跟蹤我們網站上的 javascript 錯誤:

window.onerror = function(message) {
    log(message);
};

上面代碼中的日志功能在控制台中為開發人員顯示錯誤消息,但對普通用戶不顯示。 我們正在考慮為普通用戶顯示某種信息,然后在用戶確認消息后重新加載頁面。 然而,如果我們能找到一種方法來確保 javascript 即使在發生錯誤后也能繼續工作,那就更好了。 所以我們想知道是否有辦法“重新初始化” javascript 在發生錯誤后重新開始。 任何幫助,將不勝感激。 謝謝

抱歉,如果您已經嘗試過,但是您是否嘗試過“try catch”塊?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

這將允許它遇到錯誤,然后繼續。 在“catch”塊中,你可以做一些錯誤的事情,但你也可以在錯誤發生后運行其他代碼。

沒有內置方法可以重新初始化您的代碼(除了重新加載頁面),但您可以使用以下方法:

window object 中保存 object 鍵名的副本。 將您的起始代碼包裝在 function 中,並在啟動時調用 function 一次。 如果您檢測到錯誤,請從window object 中刪除所有未保存在原始副本中的鍵值對; 這將刪除所有全局變量。 最后,再次調用您的初始化 function。

這在實施時可能會有一些復雜性,但在大多數情況下應該可以工作。

正如@That'sIs JustCrazy 所說,遺留的事件偵聽器可能是一個問題,因此您還需要一種重置 DOM 的方法。 您可以在開頭保存html標記的原始內容的副本, const savedHTML = document.getElementsByTagName("html")[0].innerHTML 然后運行document.getElementsByTagName("html")[0].innerHTML = savedHTML 我記得在某處讀過,刪除帶有事件偵聽器的元素會導致 memory 在 IE 上泄漏,但在其他瀏覽器上沒問題。

暫無
暫無

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

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