2010-02-24 45 views
1

[更新。我需要更精確,我看到...] 請看下面的例子在javascript:不觸發錯誤未被jquery啓動()函數捕獲

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert('error'); // this one works 
     try {i.dont.exist += 0;} 
     catch(e) { 
      // do some stacktrace stuff, this does not trigger 
      alert(e.stack); 
     } 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(document).ready(function() { 
     foo[1]++; 
     }); 
    </script> 
    </head> 
<body> 
    <p>Hello world.</p> 
</body> 
</html> 

的2警報。爲什麼? 如果我將「foo [1] ++」替換爲「這是一條虛假行」,則一切正常,並且都會觸發警報。是否有一些運行時錯誤問題?

回答

1

由於您的Javascript錯誤,您的錯誤處理程序函數未成功定義,因此未觸發警報:-)該代碼塊無法正確解析,因此無法運行。

設置它是這樣的:

<script> 
    $(function() { 
    window.onerror = function() { 
     // ... 
    }; 
    }); 
</script> 

如果是在自己的腳本標記,那麼它會沒事的。現在,您可能需要重新考慮將錯誤處理程序的定義延遲到「就緒」事件處理,因爲在達到該點之前可能有錯誤。

[編輯] OK這裏是一個完整的例子,它爲我工作得很好:

<html> 
    <head> 
    <script> 
     window.onerror = function() { 
     alert("OH NO THERE HAS BEEN AN ERROR!"); 
     }; 
    </script> 
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script> 
    <script> 
     $(function() { 
      here is some bogus stuff that will cause Javascript parse errors. 
     }); 
    </script> 
    </head> 
    <body> 
    <p>Hello world.</p> 
    </body> 
</html> 
+0

好吧,我感動的onerror處理程序,以自己的腳本標籤。它不會改變行爲,就緒函數內部的錯誤不會觸發「堆棧」... – 2ni 2010-02-25 22:16:53

+0

請檢查我的更新到您的完整示例的答案 – Pointy 2010-02-25 23:43:21

+0

thx。這也適用於我,但這不是重點。我更新了我上面的不工作示例。 – 2ni 2010-02-26 09:50:07

相關問題