2010-06-11 95 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>'); 
相關問題