IE7 "Операция прервана" даже с FastInit? - PullRequest
0 голосов
/ 20 июля 2009

Часть кода JavaScript, над которым я работаю, вызывает неприятное сообщение «Операция прервана» в IE. Я хорошо знаю, что вы не можете изменить DOM, пока он не загрузится. Конечно же, строка кода JavaScript, вызывающая ошибку, - это та, которая добавляет новый тег div в тело. Однако функция, в которой находится строка, вызывается через FastInit.addOnLoad! Я думал, что это означает, что функция будет вызвана после того, как DOM будет готов. Есть ли лучшее решение этой проблемы, чем использование FastInit?

Ответы [ 3 ]

1 голос
/ 20 июля 2009

Я не уверен насчет FastInit, но я только что ответил на похожий вопрос об ожидании готовности DOM здесь:

Инициировать нажатие быстрее, чем с document.onload

По сути, вы можете сделать это в IE, используя атрибут defer в теге скрипта:

<script type="text/javascript" defer>
</script>

Это задержит синтаксический анализ скрипта до тех пор, пока DOM не будет готов.

0 голосов
/ 20 июля 2009

N.B. SO играет глупых пиджаков с форматированием; извините за это.

Ошибка «Операция прервана» возникает при попытке изменить элемент grandparent элемента script. Так, например, следующий код вызовет его, потому что скрипт пытается изменить тело из дочернего элемента div, то есть он пытается изменить его родительский элемент:

<body>
    <div id="foo">
        <script type="text/javascript">
        var newThing = document.createElement("div");
        /* ### The next line will cause the error ### */
        document.body.appendChild(newThing);
        <script>
    </div>
</body>

Тот же код изменен на:

<body>
    <div id="foo">
    </div>
    <script type="text/javascript">
    var newThing = document.createElement("div");
    /* ### The next line will NOT cause an error ### */
    document.body.appendChild(newThing);
    <script>
</body>

может не вызвать ошибку, поскольку скрипт теперь модифицирует своего родителя, который может обрабатывать IE.

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

0 голосов
/ 20 июля 2009

К сожалению ...

window.onload = function() {
    // Your code??
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...