Добавление пользовательского метода в объект документа является неопределенным в IE8 - PullRequest
2 голосов
/ 24 июля 2010

По какой-то причине следующий код не работает должным образом в IE 8, как отмечено в комментарии.Я пытаюсь добавить метод writeSpecial к объекту документа, и он работает нормально при первом вызове метода, но всякий раз, когда он вызывается в следующий раз, он становится неопределенным.

Однако,это происходит только в IE, когда я использую событие onload.Кажется, нет никакой разницы между встроенным телом onload и window.attachEvent ('onload', main) ;.Если я вызываю main () напрямую из блока скрипта, он работает нормально.Опять же, это только в IE.

Кто-нибудь случайно узнает, почему это так?

Спасибо!

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

      document.writeSpecial = function(str)
      {      
        this.write(str + " [specialfied]");
      }          

      function main()
      {           
        alert(document.writeSpecial);
        document.writeSpecial('test 1');
        alert(document.writeSpecial);    //document.writeSpecial is undefined here in IE, works in firefox...why?
        document.writeSpecial('test 2');        
      }    
    </script>
  </head>
  <body onload="main()">
  </body>
</html>

1 Ответ

2 голосов
/ 24 июля 2010

Я провел некоторое тестирование и, насколько я понимаю, в IE document.write сбрасывает объект document. Так что вот пересмотренная версия, которая будет работать. Если бы вы не использовали функцию записи, я не думаю, что у вас были бы проблемы. Может быть, кто-то еще может объяснить, почему IE делает это.

window.onload=function(){
function foo(str){
  document.write(str + " [specialfied]");
  document.writeSpecial=foo;
}
document.writeSpecial=foo;
main();
function main(){
  document.writeSpecial('test 1');
  document.writeSpecial('test 2');        
}};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...