2009-09-18 2 views
0

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

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

ответ

3

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

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

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

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

2/Изготавливают правило более терпимы к «контент-раздел» не найден - не уверен, как часто оценивается выражение, поскольку я никогда не чувствовал необходимости использовать выражение в правилах CSS, поэтому это может не сработать.

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

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

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

+0

Хороший совет, спасибо! Бьюсь об заклад, это именно то, что происходит. Да, кажется, он просто перемещает навигационную секцию, расположенную вниз по странице, вверху. Но я также не понимаю, почему это делается. Я просто удалил код и поместил раздел nav, где он должен идти в обычном потоке страницы ... отлично работает. Парень, который делал это изначально, больше не существует, и никто, кажется, не знает, что, во всяком случае, он это делал. – Stuart

1

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

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

    }); 
+0

Спасибо за совет. Я знал, что это не было чем-то таким же основным, как отказ от использования документа, готового к событию, но все же ... странные мозговые пурги произошли. Я, наконец, понял это (см. Мой ответ), но по-прежнему не понимаю «почему». – Stuart

0

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

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

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

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

0

Спасибо за решением belugabob

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

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

+0

Добро пожаловать в SO! Такой «ответ» - это не то, что SO хочет видеть. Пожалуйста, работайте над своей репутацией, чтобы писать комментарии ниже Вопросов/ответов, на которые вы хотите внести свой вклад! :) – Nippey

 Смежные вопросы

  • Нет связанных вопросов^_^