2009-11-27 4 views
0

J'ai trouvé un bug étrange dans Internet Explorer 8. Peut-être que quelqu'un peut m'aider à le contourner.IE8 Crash sur getStyle background-position

Lorsque j'essaie de récupérer la position d'arrière-plan d'un élément, en utilisant background-position-x toutes les versions d'Internet Explorer fonctionnent à l'exception de IE8 qui bloque.

Lorsque j'exécute el.getStyle('background-position') tous les navigateurs me donnent les valeurs correctes à l'exception de IE (6, 7 et 8) qui renvoient undefined. Par conséquent, j'utilise el.getStyle('background-position-x') pour toutes les versions d'Internet Explorer.

IE8, cependant, se bloque sur le code ci-dessus.

Quelqu'un a eu des problèmes similaires? Pourquoi ne pas utiliser jquery's css function qui fonctionne bien crossbrowser?

+0

Avez-vous vérifié si el est nul avant d'appeler une fonction? Ive avait des cas où un objet utilisé pour être non initialisé dans d'autres navigateurs et non dans IE. – theraneman

+0

Merci pour l'entrée theraneman! C'est vraiment un mootools/ie bug. Vous devez utiliser un style en ligne. Lisez ma réponse ci-dessous. – Frankie

Répondre

2

Merci pour l'aide à tous. C'est vraiment un bug et ne fonctionne que sur le scénario suivant.

  1. doit être chargé css sur une feuille de style externe
  2. élément
  3. n'a pas coiffage en ligne

La façon de le réparer, même sale dur, est ajouter un style en ligne à l'élément. Rend IE8 heureux et tous les autres navigateurs fonctionnent.

Je n'ai pas testé mais, selon to this ticket, FF2 souffre également du même comportement.

notes secondaires:
@marcgg - j'allais downvote votre réponse car il est vraiment pas utile (et lié à déclencher une guerre de flamme), mais, toute la vérité dit, jQuery ne se manifeste pas ce problème. Même si, comme vous le saviez probablement déjà, ce n'est pas une option! ;)

@Fabien - IE supporte background-position-x et manque de support pour background-position la construction approuvée W3C.

+0

ce qui est utile à savoir, bien que j'ai récemment fait une animation de sprite qui lit ceci sur un élément de bloc avec stylesheet externe et mootools et n'a pas eu de tels problèmes. peut-être j'ai de la chance;) –

+0

@Dimitar, peut-être que vous définissez le CSS via javascript avant de l'attraper. De cette façon, IE fonctionne bien. Lors de ma construction, j'ai dû lire la position de fond avant de définir de nouvelles valeurs. Était-ce la casa? – Frankie

+0

oui, c'est un élément entièrement construit dans le DOM via new Element et une valeur initiale valide. TOUTEFOIS, les changements ultérieurs sont après la lecture. . maintenant que vous le mentionnez, il existe des solutions de contournement pour IE comme ça - par exemple, la conversion d'éléments en ligne dans un débordement: couche cachée, quand vous voulez bloquer peut être frustrant ... –

0

Pourquoi ne pas utiliser jquery's css function?

+0

Vous proposez d'utiliser une bibliothèque entière pour une minuscule fonction css()? – James

+1

Il utilise déjà MooTools ... Donc, utiliser JQuery serait inutile. – James

+0

MooTools ou PrototypeJS;) IE ne supporte pas background-position-x –

0

Essayez d'utiliser:

el.getStyle('backgroundPositionX') 

et

el.getStyle('backgroundPositionX') 
+0

Essayé par curiosité, mais ils le feraient crash toujours IE8. La façon d'aller les coutures comme le style sale-inline. – Frankie

0

oui, fil vieux, mais pensé que je posterai une autre solution que je suis tombé @ Mootools phare ....

if (Browser.Engine.trident){ 
    var xy = el.getStyle('background-position-x')+" "+el.getStyle('background-position-y'); 
} else { 
    var xy = el.getStyle("backgroundPosition"); 
} 

fonctionne bien pour moi jusqu'à présent.