检测并记录外部JavaScript或CSS资源无法加载的时间

我有多个引用外部js和css资源。 大多数情况下,这些都适用于第三方分析等。有时(传闻),这些资源无法加载,通常会导致浏览器超时。 当外部JavaScript或CSS资源无法加载时,是否可以检测并登录服务器?

我正在考虑某种类型的延迟加载机制,当失败时,将调用一个特殊的URL来记录此失败。 有什么建议吗?

我认为发生了什么:

  1. 用户点击我们的页面,服务器端成功处理并提供页面

  2. 在客户端,HTML标头尝试连接到我们的第三方集成合作伙伴,通常是以“http://www.someothercompany.com …”开头的javascript包含。

  3. 另一家公司无法处理我们的负载或者有很多工作时间,因此连接失败。

  4. 用户看到一个通用的IE Page Not Found,而不是我们服务器中的一个。

因此,即使我的网站已启动且其他所有内容都运行良好,只是因为这个调用第三方服务器失败,一个在HTML页面标题中,我们完全无法启动。

如果您的应用/页面依赖于JS,您可以使用JS加载内容,我知道它令人困惑。 使用JS加载这些内容时,您可以使用回调来仅使用已加载内容的function,而不必担心未加载的内容。

 var script = document.createElement("script"); script.type = "text/javascript"; script.src = 'http://domain.com/somefile.js'; script.onload = CallBackForAfterFileLoaded; document.body.appendChild(script); function CallBackForAfterFileLoaded (e) { //Do your magic here... } 

我通常通过使JS和相互依赖的文件的数组更加复杂,如果它们没有加载,那么我有一个错误状态。

我忘了提及,显然我只是展示如何创建一个JS标记,你必须为你想要加载的其他类型的文件创建自己的方法。

希望也许有帮助,欢呼

您可以在JavaScript中查找对象的存在,例如,查看是否加载了jQuery …

 if (typeof jQuery !== 'function') { // Was not loaded. } 

jsFiddle 。

您还可以检查缺少的CSS样式,例如,如果您知道某个CSS文件将背景颜色设置为#000

 if ($('body').css('backgroundColor') !== 'rgb(0, 0, 0)') { // Was not loaded. } 

jsFiddle 。

当这些失败时,您可以向服务器创建XHR以记录这些失败。

创建js名称和会话cookie的哈希值,并在plain和hash中发送两个js名称。 服务器端,如果两者都是相同的日志,则进行相同的哈希,如果不是,则认为它是滥用。