繁体   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