JavaScript错误的优雅处理

分享于 

5分钟阅读

Web开发

  繁體 雙語

介绍

在这个小文章中,我们将讨论如何优化JavaScript错误,而不是浏览器的依赖行为。 这也有助于我们通信客户端脚本失败,并且一个或者多个客户端脚本操作可能会再次检查。

场景

现在,如果用户在窗口状态栏中看到了客户端脚本错误,可能会让用户感到恶心,这可能会让用户感到恶心,因为出现了来自化妆品和华丽的文档效果的网页。 当脚本出错时,通常也会停止运行的脚本函数,并且不会在该上下文中执行进一步的脚本调用。 也许在这些情况下,如果我们的脚本能够通知失败的服务器,也可以优雅地报告错误/失败。

解决办法是什么呢

这个问题的解决方案非常简单简单,可以根据脚本的需要和复杂性来解决。

  • 以友好的方式捕捉和亲密用户

    在网页的开始处,只需添加以下行:

    window.onerror = errorHandler;function errorHandler(msg,url,lno)
    {
     var alertmsg = "There has been an internal error." + 
     " Please apologize for inconvenience.";
     alertmsg += "nnPlease refresh this page and this error should go away.nn";
     alertmsg += "If problem persists please contact site helpdesk.";
     alert (alertmsg);
     return (true);
    }

    也许你可以通过打开一个小的定制窗口并以更友好的方式显示错误来扩展这个。

  • 后台服务器

    像. NET 这样的框架和环境有更简单的postback 功能,你可以利用它来处理这种情况。 当发生错误时,你可以手动调用 __doPostBack()。 也许只有在 postback 中启用了控件( 比如 DataGridCheckbox/Dropdownlist )的网页时才可以使用这里函数。 我们可以有效地避免这个问题,因为它有一个无文本的虚拟 LinkButton。 这将强制. NET 运行时定义 __doPostBack 函数,我们可以将错误细节传递给虚拟 LinkButton 处理程序。

让服务器知道。

错误处理的本质是不被抑制的。 应该让服务器知道相同的情况,以便管理员可以采取必要的操作来纠正相同的问题。 为此,我采用一个简单的jQuery Post,它可以收集消息并发布到服务器中的特定处理程序。

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<Script Language="'JavaScript'" type='text/javascript'>function LogScriptErrorsToServer(strScriptError)
{
 try
 {
 var strErrorURL = '<%# ResolveUrl("~/app/handlers/helper.ashx?type=scripterrors") %>'; 
 $.ajax({
 type: "POST",
 data: "scripterror="+strScriptError,
 url: strErrorURL,
 cache:false,
 success: function(data)
 {
 },
 error:function (data)
 {
 }
 }); 
 }
<span class="Apple-tab-span" style="white-space: pre;"> </span>catch (e) {}
}</Script>

以下是关于这里服务器端推送的一些说明:

  • jQuery只能向服务器提供页面服务的相同域发布。
  • 如果发生了一些错误发送消息,它将不会升级,因为我遵循了这个代码段的'全部吃掉'方法。
  • 我使用的这个特殊的jQuery版本是 2.0.0,它来自谷歌 CDN。 这对于 IE 8和更低版本可能不起作用。 因此,如果你的应用程序需要支持,请将这里脚本转换为 1.9或者更低版本。 另外,如果你的应用程序是开源的,那么你可以让jQuery与你的应用程序一起打包。

结束语

不管上面使用什么技巧,目标都是用户在用户不知道脚本错误发生的消息时不会受到干扰,因为用户不知道浏览器期望什么。 是不是我希望这篇文章对于世界上的互联网应用开发人员来说能够适当地处理客户端脚本错误。