Error de tiempo de ejecución intermitente en IE7: ocurrió en la línea 0, ¿se requiere un objeto? ¿Eh?

StackOverflow https://stackoverflow.com/questions/1442441

Pregunta

Un sitio en el que estoy trabajando muestra un error de tiempo de ejecución intermitente pero solo en IE7 y 8. Este error aparecerá casi al azar (por ejemplo, puede aparecer una vez en la carga de la página inicial o puede no aparecer hasta la enésima página carga). El error dice que ocurrió en la línea: 0 y el error es " Objeto requerido " ;. Estoy usando jQuery en todo el sitio, pero deshabilitarlo por partes (es decir, los diversos complementos y demás) no ha resuelto el problema. Todavía estoy trabajando pero quiero obtener esta '' ¡Ayuda! '' en stackoverflow en caso de que alguien haya tratado algo como esto antes.

La intermitencia de esto es lo que realmente está agrietando mi trasero.

¿Fue útil?

Solución

De su respuesta, supongo que el elemento con una identificación de 'sección de encabezado' está en la parte superior de la página y, ocasionalmente, la regla css se aplica antes de que se cargue el resto de la página. Esto significa que la expresión intenta evaluar el offsetHeight de 'content-section' antes de que exista ese elemento.

Tengo un par de sugerencias sobre cómo lidiar con esto, pero tendrías que probarlas para evaluar su utilidad.

1 / En lugar de hacer la regla basada en la identificación de la 'sección de encabezado', hágalo en base a la sección de encabezado de la clase. No agregue esta clase al marcado, pero agréguela al finalizar la carga del documento, a través de jquery: deje la identificación del elemento como está ...

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

2 / Haga que la regla sea más tolerante de que no se encuentre la 'sección de contenido'; no estoy seguro de con qué frecuencia se evalúa la expresión, ya que nunca he sentido la necesidad de usar la expresión en reglas CSS, por lo que esto puede no funcionar .

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

Avísame cómo te va.

P.S. No tengo idea de lo que la regla está tratando de lograr: me burlé de una página con lo que supongo que es el mismo diseño, y todo lo que hace es mover gran parte del contenido de la parte superior de la página, de una manera que impide de ser visto alguna vez.

Otros consejos

Parece que su script podría estar intentando acceder a un objeto antes de que el DOM se haya creado completamente. ¿Se aseguró de que su función esté dentro de la función jQuery ready?

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

   });

Lo descubrí. Hay dos expresiones que se utilizan en un archivo css solo de IE. Aquí hay uno, por ejemplo:

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

Comentar ambas instancias que usan estas expresiones resuelve el problema. No estoy seguro de por qué sucede esto exactamente (y no escribí el CSS que está haciendo esto, así que ni siquiera tenía idea de mirar ese archivo CSS).

No puede haber un conflicto con otros JS porque había al menos 2 lugares donde se estaba utilizando donde no se estaba cargando ningún otro JS, pero aún así se produjo el error. ¿Quizás los ID (sección de contenido o sección de encabezado) no se pudieron encontrar por alguna razón? No estoy realmente seguro ... especialmente porque el comportamiento era tan inconsistente. Hmmm ...

Gracias por la solución belugabob

Experimenté el mismo error con el objeto requerido en la línea 0. Su solución con la expresión ...? ...: 0 en el CSS para la hoja de estilo es el trabajo.

La razón por la que se usa este tipo de código, para mover la navegación / encabezados hacia arriba, está relacionada con el SEO. Desea que su contenido esté en la parte superior, y la navegación inteligente de SE menos importante debajo de él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top