2012-05-13 57 views
0

在一個獨立的XUL應用程序,我想搭上server not found例外。我試圖通過檢查onStateChange事件的nsIWebProgressListener事件,但這似乎不工作。我的onStateChange事件實現如下所示。我假設如果STATE_STARTSTATE_STOP未返回有效值,則頁面加載出現問題,並向用戶顯示錯誤消息。捉「找不到服務器」異常

onStateChange: function(aProgress, aRequest, aFlag, aStatus) { 
    const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START; 
    const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP; 

    if(aFlag & STATE_START) { 
     document.getElementById("progressBar").hidden = false; 
    } 
    if(aFlag & STATE_STOP) { 
     setTimeout(function() { document.getElementById("progressBar").hidden = true; }, 2000);  
    } 

    if(aFlag & (!STATE_START | !STATE_STOP)) { 
    alert("Your connection seems to be down. Please confirm with your system admin.");  
    } 
    return 0; 

},

可有人好心指點我什麼我做錯了嗎?提前致謝。

+0

你能成爲一個更具體一點,你在做什麼?如果我理解正確,您正嘗試將URL加載到''元素中,並且擔心出現在錯誤控制檯中的異常?那個異常說**完全**? –

+0

我正在開發一個桌面應用程序,充當在線服務的網關。在線服務在瀏覽器元素中啓動。我希望能夠判斷是否無法訪問Internet,並向用戶顯示適當的消息。使用'loadURI()'方法加載。我嘗試過在try catch塊中圍繞這個,如下所示:'try {document.getElementById(「browser-id」).loadURI(「http://www.online-service.com」); \t \t}趕上(E){ \t \t \t警報( 「你的互聯網連接似乎已斷開,請諮詢您的網絡管理員。」); \t \t}',但catch塊沒有被執行。 – okello

+0

當然不是,DNS解析是一個異步操作 - 您不能指望在那裏同步獲取異常。請編輯您的問題並添加您嘗試過的'nsIWebProgressListener'代碼,這是正確的方法,並且您必須在某處出錯。 –

回答

2

onStateChange參數指示是否有一個連接錯誤是aStatus。例如,你可以使用Components.isSuccessCode

if ((aFlag & STATE_STOP) && !Components.isSuccessCode(aStatus)) 
{ 
    alert("Your connection seems to be down. Please confirm with your system admin."); 
} 

你也可以用Components.results.NS_ERROR_UNKNOWN_HOST對應於錯誤「找不到服務器」比較aStatus。如果連接斷開,則可能存在許多其他錯誤,例如, NS_ERROR_CONNECTION_REFUSED(連接失敗),(未找到代理)NS_ERROR_UNKNOWN_PROXY_HOSTNS_ERROR_OFFLINE(嘗試連接,而在脫機狀態)。您可以在nsNetError.h中找到完整的網絡錯誤代碼列表。

+0

謝謝Palant。 if((aFlag&STATE_STOP)&&(aStatus == Components.results.NS_ERROR_UNKNOWN_HOST)){ \t \t alert(「您的連接似乎已關閉,請與您的網絡管理員確認。 \t}'效果很好。但是,即使有連接,上述代碼也會拋出異常。 – okello

+0

有不同的錯誤代碼,其中大部分並不意味着用戶不在線 - 您應該檢查您得到的是哪一個。 –

+0

謝謝。我已經實現了對NS_ERROR_UNKNOWN HOST,NS_ERROR_CONNECTION_REFUSED,NS_ERROR_OFFLINE和NS_ERROR_UNKNOWN_PROXY的錯誤檢查。該應用程序包含指向在線服務的鏈接,因此用戶不需要輸入URL。事實上,沒有規定用戶輸入URL。我認爲這限制了用戶可能遇到的錯誤範圍。 – okello