2010-01-08 64 views
5

onerror page on MSDN指出「當對象裝載過程中發生錯誤觸發。」使用onerror處理程序可以連接到一個腳本元素和它。如何觸發script.onerror在Internet Explorer?

爲單元測試的目的,我試圖讓這個的onerror處理火災,也沒有找到合適的例子。

下面的代碼觸發Firefox中的錯誤,而是顯示在Internet Explorer毫無戒備

<script src="http://www.google.com/NOTFOUND.js" onerror="alert('error fired')"></script> 

有誰知道script.src將火附着script.onerror處理程序的值?

+0

IIRC,類似'src =「1」'應該會觸發錯誤。 – kangax 2010-01-09 03:16:14

+0

@kangax:不錯的嘗試,但沒有,SRC =「1」只有觸發window.onerror,不script.onerror – 2010-01-09 13:47:29

+0

沒有真正涉及到這個問題,但我注意到你致力於代碼審查的建議。由於某種原因,您的代表得分不正確。您可能需要關聯您的帳戶或確認一些電子郵件才能解決問題。較低的代表不幸地對提案承諾影響較小。 – greatwolf 2011-01-13 13:49:29

回答

8

我發現這個buried in some MSDN documentation

注意的是,文件誤認爲這個工程太元素;該錯誤將在3月份最終版Internet Explorer 5的Workshop文檔中得到解決。

我想到的是,接下來的事情可以幫助是onreadystatechange事件:

<script src="http://www.google.com/NOTFOUND.js" onreadystatechange="alert(this.readyState)"> 

此事件觸發兩次對我來說,一旦與「加載」,再次以「裝」,腳本是有效與否。我發現的其他文件說,有時它會引發一個完整的事件,而且它應該在什麼時候開火併不是很清楚。所以看起來這是行不通的。

所以我認爲你留下了檢查該腳本應該來聲明一個變量確實存在的哈克解決方案。在HTML:

<script src="http://yourdomain.com/declare_foo.js"></script> 
<script>if (typeof foo == "undefined") {alert ('error loading script');}</script> 

然後在declare_foo.js當然,你必須

var foo = 'Script loaded successfully'; 
+1

非常好的趕上!令人遺憾的是,我不能認爲腳本中會存在一個特定的變量,因爲這個代碼將被用於動態加載第三方腳本。 我加入到MSDN上的onerror頁面評論指向迴文章,你發現的說明。謝謝安妮。 – 2010-01-09 14:16:25

+0

@Eric你有沒有找到解決這個問題的解決方法? – Tom 2010-11-14 14:36:14

+0

@Tom nope,沒有解決方法。有些錯誤無法在JavaScript中捕獲。 – 2010-11-16 13:08:50

0

已經剛剛做了一點閱讀此,它看起來像的onerror也可以附加到window對象。請參閱:

http://www.javascriptkit.com/javatutors/error.shtml

根據該頁面中,您可以在味精,URL和行號參數傳遞:

window.onerror=function(msg, url, linenumber){ 
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber) 
return true 
} 

不知道在這個瀏覽器的支持,但感謝它帶給我的注意!

更新:沒有在Safari 4做任何事情(除了登錄螢火一個錯誤往常一樣),但顯示在http://www.javascriptkit.com/javatutors/errortest2.htm

更新2在Firefox 3.6測試版5.錯誤測試警報:做了測試有以下:

的index.html:

<html> 
<head> 
<script type="text/javascript"> 

window.onerror=function(msg, url, linenumber){ 
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber) 
return true 
} 
</script> 

<script type="text/javascript" src="js.js"></script> 
</head> 
<body> 
</body> 
</html> 

js.js:(!愚蠢的名字,我知道)

document.write('hi there' 

結果在FF 3.6 Beta版5:

Result

+1

感謝您的評論。我應該提到我知道如何觸發window.onerror處理程序;在這裏我特別感興趣的是script.onerror處理程序。 – 2010-01-08 13:44:07

+2

感謝亞當,但我真的試圖在這裏觸發script.onerror,而不是window.onerror。我想檢測加載動態腳本的(不成功)結束,並將處理程序設置爲window.onerror並不會真的有幫助。 – 2010-01-08 14:00:14

0

這個怎麼樣?

<script language="JavaScript" type="text/javascript"> 
    var DidItLoad=0; 
    function funcDidItLoad() 
    { 
     if(DidItLoad==1) 
     { 
      alert("good") 
     } 
     else 
     { 
      alert("bad") 
     } 
     DidItLoad=0; 
     return 0; 
    } 
    </script> 
    <script language="JavaScript" type="text/javascript" onload="DidItLoad=1;" src="javascript/myError.js"></script><!--erase me--> 
    <script language="JavaScript" type="text/javascript"> 
     funcDidItLoad(); 
    </script> 
+1

謝謝,但我一直在尋找一個在JavaScript庫中使用的通用解決方案,而不是一次性的解決方案。 – 2011-12-09 10:42:00

相關問題