Прерывистая ошибка времени выполнения в IE7: произошла в строке 0, требуется объект? А? - PullRequest
0 голосов
/ 18 сентября 2009

Сайт, над которым я работаю, периодически отображает ошибку времени выполнения, но только в IE7 и 8. Эта ошибка будет появляться почти случайно (например, она может появиться при начальной загрузке страницы один раз или может не появиться до n-й страницы). нагрузка). Ошибка говорит о том, что это произошло в строке: 0, и ошибка «Требуется объект». Я использую jQuery по всему сайту, но отключаю его по частям (т.е. различные плагины и еще много чего), но это не решило проблему. Я все еще проверяю это, но хочу получить эту "Помощь!" out на stackoverflow в случае, если кто-то имел дело с чем-то подобным ранее.

Прерывистость этого - то, что действительно потрескало мою задницу.

Ответы [ 4 ]

3 голосов
/ 18 сентября 2009

Из вашего ответа я бы предположил, что элемент с идентификатором 'header-section' находится в верхней части страницы, и иногда правило css применяется до загрузки остальной части страницы. Это означает, что выражение пытается оценить offsetHeight 'content-section' до того, как этот элемент существует.

У меня есть пара советов о том, как с этим бороться, но вам нужно будет попробовать их, чтобы оценить их полезность.

1 / Вместо создания правила на основе идентификатора раздела заголовка, создайте его на основе класса заголовка раздела. Не добавляйте этот класс в разметку, но добавляйте его по завершении загрузки документа через jquery - оставьте идентификатор элемента как есть ...

$(document).ready(function(){
  $("#header-section").addClass("header-section");
});

2 / Сделать правило более терпимым к тому, что 'content-section' не найден - не уверен, как часто вычисляется выражение, так как я никогда не чувствовал необходимости использовать выражение в правилах css, поэтому это может не сработать .

#header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}

Дайте мне знать, как вы поживаете.

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

1 голос
/ 18 сентября 2009

Возможно, ваш скрипт пытается получить доступ к объекту до того, как DOM будет полностью создан. Вы убедились, что ваша функция находится внутри функции готовности jQuery?

   $(document).ready(function() {
          // put all your jQuery goodness in here.

   });
0 голосов
/ 23 декабря 2009

Спасибо за решение, белугабоб

Я столкнулся с той же ошибкой, когда в строке 0 требуется объект. Ваше исправление с выражением ...? ...: 0 в CSS для таблицы стилей ie сделало свою работу.

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

0 голосов
/ 18 сентября 2009

Я понял это. В CSS-файле только для IE используются два выражения. Вот, например, один:

#header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}

Комментирование обоих экземпляров, использующих эти выражения, решает проблему. Не уверен, почему это происходит именно так (и я не написал CSS, который делает это, поэтому я даже не думал даже заглядывать в этот файл CSS).

Это не может быть конфликт с другим JS, потому что было по крайней мере 2 места, где он использовался, когда никакой другой JS не загружался вообще, но ошибка все же произошла. Возможно, идентификаторы (раздел содержимого или раздел заголовка) не могут быть найдены по какой-либо причине? Не совсем уверен ... тем более что поведение было таким непоследовательным. Ммм ...

...