【发布时间】:2017-11-29 11:37:48
【问题描述】:
我的网站包含用于在发生 JavaScript 错误时将它们记录回 Web 服务器 (Apache) 的代码,使用 AngularJS 中的 $exceptionHandler 组合来处理我的 Angular 代码中的异常,并通过 window.onerror 来处理发生在 Angular 之外的事情。
最近记录的许多错误表明客户端似乎随机未能请求一种或另一种资源。到目前为止,我找不到未获取的特定资源与出现问题的浏览器或客户端设备之间的任何关联。
例如,我页面上的其中一个 JavaScript 资源称为“utility.js”。这包括网站的一些全局功能和其他常见内容。一位 iPhone 用户(在 iOS 10.3.2 上)今天加载了一个页面并获取了该页面的所有资源,除了utility.js(我查看了会话的 Apache 访问日志,并且可以看到在请求的页面中标识的所有其他资源 -并且以正确的顺序-但不是utility.js,并且在同一时间范围内的错误日志中没有任何内容)。一秒钟后,由于未定义在 utility.js 中定义的全局函数,因此从手机向我们的服务器记录了一个 JavaScript 错误。
另一个(更常见的)示例是 AngularJS 在尝试访问 HTML 模板资源时生成 $compile:tpload 错误。我每天都会得到几个。有问题的模板因错误实例而异,但在我审查的情况下,Apache 日志中再次没有证据表明对模板资源的请求。同一页面的其他模板资源已成功加载。值得注意的是,在这种情况下,我有时会看到同一个客户端在几分钟内多次记录有关同一资源的错误,这表明用户正在重新加载页面并遇到相同的问题,因此似乎确实存在“卡住”或在浏览器中阻塞,但我无法想象是什么。
我有理由相信,这些资源并没有像我所看到的情况那样缓存在用户的浏览器中,页面上的其他资源被请求,如果页面已经加载,则不会被请求。
目前我真的不知道该去哪里解决这个问题。据我所知,我无法查看我的页面的浏览器网络流量。
关于如何进一步诊断此问题的任何建议?
【问题讨论】:
-
这种情况只发生在手机上吗?
-
不...最常见于手机,但在桌面客户端上也观察到。我认为 IE11 对它有特殊的偏好,但并不是孤立的
-
让我稍微修改一下:大多数 Android + Chrome 58,但在其他设备/浏览器/版本和桌面客户端上也观察到了 - 到目前为止 Windows 7 或 Windows 10 上的 IE11 和 Chrome 58。
标签: javascript angularjs apache error-handling