Как вызвать script.onerror в Internet Explorer? - PullRequest
5 голосов
/ 08 января 2010

На странице onerror в MSDN указано, что обработчик onerror может быть присоединен к элементу сценария и что он "запускается при возникновении ошибки во время загрузки объекта."

В целях модульных тестов я пытаюсь запустить этот обработчик ошибки, но не могу найти подходящий пример.

Следующий код вызывает ошибку в Firefox, но в Internet Explorer предупреждение не отображается

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

Кто-нибудь знает значение для script.src, которое будет запускать обработчик, прикрепленный к script.onerror?

Ответы [ 3 ]

8 голосов
/ 09 января 2010

Я нашел это похороненным в некоторой документации MSDN :

Обратите внимание, что в документации ошибочно сказано, что это работает и для элементов; ошибка будет исправлена ​​в документации семинара для окончательного выпуска Internet Explorer 5 в марте.

Следующее, о чем я подумал, может помочь событие 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';
0 голосов
/ 09 ноября 2011

Как насчет этого?

<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>
0 голосов
/ 08 января 2010

Только что немного прочитав об этом, похоже, что onerror также может быть присоединен к объекту окна. См:

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

В соответствии с этой страницей вы можете передать аргументы msg, url и linenumber:

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

Не уверен, что браузер поддерживает это, но спасибо, что обратили на это мое внимание!

Обновление: ничего не делал в Safari 4 (кроме регистрации ошибки в firebug как обычно), но отображает предупреждение в Firefox 3.6 Beta 5. Тест ошибки на http://www.javascriptkit.com/javatutors/errortest2.htm

Обновление 2: выполнен тест со следующим:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...