2010-06-11 75 views
0

我的web应用程序向浏览器发送诊断信息javascript告诉我我注入的[script]标记无法下载关联的.js文件。我无法在本地重现此操作,并且没有特定的文件失败模式或浏览器类型。这些请求的地理位置有一个模式 - 墨西哥和巴西总是比较频繁 - 所以我猜测可能是因为互联网总体上更加脆弱,而这只是导致失败的网络问题。当[脚本]文件下载失败时,我怎么知道为什么?

虽然我真的很想知道。有什么方法可以从浏览器javascript确定是否因服务器返回的错误,网络错误或协议超时而发生故障?我不关心这个机制是否是浏览器特定的,因为相同的问题可能导致所有浏览器类型的错误。

回答

1

我对此表示怀疑:<script>标签可能会有类似图像的onerror事件,但我怀疑您会从中获取任何详细信息。

我在JavaScript中唯一知道的就是提供详细的错误信息,比如你正在寻找的是Ajax。在Ajax中,您可以捕获超时以及服务器响应代码。

您可以尝试在“正常”包含失败时向​​脚本文件发出Ajax请求,并分析该错误请求。但我不完全确定这是否会有所帮助:可能是<script>部分失败,但由于失败的偶发性,Ajax调用加载得很好。

第二个选项 - 我不知道是否有稳定的实现 - 实际上是使用Ajax加载脚本,并将其注入到文档中。我确定有一些 生病 创造性思维已经涉足这个地方:)这将使您有机会分析任何失败(例如进行另一个Ajax调用,发送诊断信息)。

最后同样重要的是,查看您的服务器的错误日志以了解是否有任何异常情况。

+0

我会看看是否有任何我们可以用ajax做的事情;我有点担心使用它来实际下载脚本 - 看起来这可能会破坏处理浏览器的一些内置脚本下载 - 但我们至少可以在测试中尝试它。 我们可能会在检测到这些错误时添加重试次数,但我担心由于我们看到很多这些脚本下载错误,所以也许我们的其他下载也失败了,但没有记录。 关于服务器的好处 - 我会检查运行我们的资源服务器的人,看看他们是否在他们的最后观察到了这些。 – Bruce 2010-06-12 21:02:45

1

首先,作为ISP行业的老手,我可以告诉你,美国南部的通信基础设施迅速恶化,只要考虑它主要是第三世界的国家与古铜基长途电话网络。

由服务器返回错误

使用服务器日志来检测这些!你不应该问客户端(浏览器)你应该已经知道答案的东西。

从网络错误或协议超时?

由于网络错误是非常宽泛的(如协议超时网络错误),我会解决这一问题,并没有,也没有办法,除非你使用一些AJAX调试这些。 jQuery有专门用于此任务的jQuery.getScript(),但它可能不会为您提供所需的选项,因此您需要将jQuery.ajax()示例实现为jQuery.getScript(),然后实现该错误( )方法,您可以在其中查看XHR以查看失败原因。当然jQuery不是需要所有这一切,它只是使它更容易。

0

<script>标签有onerror但正如Pekka所说,它可能没有提供任何有用的反馈意见。这里有一个代码片段,以防万一您想进一步探索的东西:

var url = 'test.js'; 
document.write('<script src="'+url+'" type="text/javascript" charset="utf-8" onerror="throw(\'An error occured: \' + this.src)"><\/script>'); 
相关问题