2009-09-18 14 views
0

Un site sur lequel je travaille affiche une erreur d'exécution intermittente mais seulement dans IE7 et 8. Cette erreur apparaîtra presque aléatoirement (comme, il peut apparaître sur le chargement initial de la page une fois ou il peut ne pas apparaître jusqu'au nième chargement de page). L'erreur indique qu'il s'est produit à la ligne: 0 et que l'erreur est "Objet requis". J'utilise jQuery sur l'ensemble du site, mais la désactivation en morceaux (c'est-à-dire les divers plugins et autres) n'a pas résolu le problème. Je suis toujours en train de le faire mais je veux obtenir cette "Aide!" sur stackoverflow au cas où quelqu'un aurait déjà fait face à quelque chose comme ça.Erreur d'exécution intermittente dans IE7: s'est-il produit à la ligne 0, Objet requis? Huh?

L'intermittence est ce qui me gâche vraiment le cul.

Répondre

3

De votre réponse, je suppose que l'élément avec un identifiant de 'header-section' est en haut de la page et, occasionnellement, la règle CSS est appliquée avant le reste de la charges de page. Cela signifie que l'expression essaie d'évaluer offsetHeight de 'content-section' avant que cet élément existe.

J'ai quelques suggestions sur la façon de traiter cela, mais vous devrez les essayer afin d'évaluer leur utilité. 1/Au lieu de faire la règle basée sur l'id de la 'section d'en-tête', faites-le en se basant sur la section d'en-tête de la classe. Ne pas ajouter cette classe à la balise, mais l'ajouter à la fin du chargement de documents, via jquery - laisser l'id de l'élément comme il est ...

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

2/Faire la règle plus tolérante de la 'content-section' n'étant pas trouvé - je ne sais pas à quelle fréquence l'expression est évaluée, car je n'ai jamais ressenti le besoin d'utiliser l'expression dans les règles CSS, donc cela peut ne pas fonctionner.

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

Faites-moi savoir comment vous allez.

P.S. Je n'ai aucune idée de ce que la règle essaie d'accomplir - je me suis moqué d'une page avec ce que je suppose être la même mise en page, et tout ce qu'elle fait est de déplacer beaucoup de contenu du haut de la page, d'une manière qui empêche il d'être jamais vu.

+0

Bon conseil, merci! Je parie que c'est exactement ce qui se passe. Ouais, il semble simplement déplacer une section de navigation qui est placée en bas de la page, jusqu'au sommet. Mais je ne comprends pas non plus pourquoi cela est fait. Je viens de supprimer le code et mettre la section nav où il devrait aller dans le flux normal de la page ... fonctionne bien. Le gars qui l'a fait à l'origine n'est plus là et personne ne semble savoir ce qu'il faisait pour ça. – Stuart

1

Il semble que votre script tente d'accéder à un objet avant la création complète du DOM. Avez-vous vérifié que votre fonction est dans la fonction prête de jQuery?

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

    }); 
+0

Merci pour le conseil. Je savais que ce n'était pas aussi simple que de ne pas utiliser l'événement «prêt pour le document» mais quand même ... des pets de cerveau étranges se sont produits. J'ai finalement compris (voir ma réponse) mais je ne comprends toujours pas le "pourquoi". – Stuart

0

Je l'ai compris. Deux expressions sont utilisées dans un fichier css IE uniquement. En voici un par exemple:

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

Commenter les deux instances qui utilisent ces expressions résout le problème. Je ne sais pas pourquoi cela se passe exactement (et je n'ai pas écrit le CSS qui le fait donc je n'avais aucune idée de même regarder dans ce fichier CSS).

Il ne peut pas être un conflit avec d'autres JS car il y avait au moins 2 endroits où cela était utilisé alors qu'aucun autre JS n'était en cours de chargement mais que l'erreur était toujours présente. Peut-être que les identifiants (section de contenu ou section d'en-tête) n'ont pas pu être trouvés pour une raison quelconque? Pas vraiment sûr ... surtout que le comportement était si incohérent. Hmmm ...

0

Merci pour la solution belugabob

j'ai vécu la même erreur avec l'objet nécessaire sur la ligne 0. Votre solution avec l'expression ... ...: 0 dans le css pour le stylesheet-à-dire fait le travail .

La raison pour laquelle ce type de code est utilisé, en déplaçant la navigation/les en-têtes, est liée au référencement. Vous voulez votre contenu sur le dessus, et le moins important de la navigation SE sage ci-dessous.

+0

Bienvenue sur SO! Ce genre de «réponse» n'est pas ce que le SO veut voir. S'il vous plaît travailler sur votre réputation afin d'écrire des commentaires ci-dessous les questions/réponses auxquelles vous voulez contribuer! :) – Nippey