0

Lorsque vous faites une pop-up modale en utilisant jquery.fancybox-1.2.6.js il fonctionne sur toutes les plates-formes que j'ai essayé sauf IE8 lorsqu'il est réglé en mode de compatibilité. Lorsque le modal essaie d'afficher, j'obtiens une erreur javascript "non implémentée" sur la page qui empêche le modal de surgir. Il donne le numéro de ligne (ligne 207) l'erreur se produit dans jquery.fancybox-1.2.6.js et cela contient les éléments suivantsFancybox obtient javascript "non implémenté" erreur dans le mode de compatibilité IE8

$("#fancy_content")[0].style.removeExpression("height"); 

J'ai fait un vieux fait de l'école de trouver des déclarations d'alerte et il semble .style fonctionne, c'est la fonction removeExpression qui n'est "pas implémentée".

Quelqu'un a-t-il pu contourner ce problème?

+0

Très peu de bibliothèques open source sont supposées fonctionner en mode de compatibilité IE8.Généralement, vous n'obtenez en mode de compatibilité que si vous avez fait une erreur en codant votre site, donc ce n'est pas un scénario que les gens essaient de supporter. – Domenic

Répondre

1

j'ai pu commenter les parties offenser et il semble fonctionner très bien pour moi maintenant:

//This was causing error in IE8 in compatibility mode 
//   if (oldIE || ieQuirks) { 
//    $("#fancy_content")[0].style.removeExpression("height"); 
//    $("#fancy_content")[0].style.removeExpression("width"); 
//   } 

      if (pad > 0) { 
       width += pad * 2; 
       height += pad * 2; 

       $("#fancy_content").css({ 
        'top': pad + 'px', 
        'right': pad + 'px', 
        'bottom': pad + 'px', 
        'left': pad + 'px', 
        'width': 'auto', 
        'height': 'auto' 
       }); 

//This was causing error in IE8 in compatibility mode 
//    if (oldIE || ieQuirks) { 
//     $("#fancy_content")[0].style.setExpression('height', '(this.parentNode.clientHeight - ' + pad * 2 + ')'); 
//     $("#fancy_content")[0].style.setExpression('width', '(this.parentNode.clientWidth - ' + pad * 2 + ')'); 
//    } 

Semble que cela fonctionne wierd sans cela, mais peut-être cela ne fonctionnera pas pour tout le monde en fonction de leur utilisez la fancybox ...

0

Vous avez déjà posté une réponse, mais il y a quelque chose que je pense qui pourrait être utile d'essayer.

.style.removeExpression est ce que je m'attends à ne pas être implémenté. Le code est là pour aider quirksmode à faire le bon dimensionnement.

donc au lieu de

$("#fancy_content")[0].style.removeExpression("height"); 

essayer de faire

$("#fancy_content").height('auto') 

et plus tard

$("#fancy_content").height($(window).height() - pad * 2); 

la même chose avec la largeur. Je ne suis pas sûr si le réglage des dimensions est important ici, il peut être important quand il y a beaucoup de contenu et que la div peut être trop grande. Essayez avec beaucoup de contenu ou coller une grande image là avec Firebug ou quelque chose :)

0

Je kow c'est une vieille question, mais voici mes deux cents pour la postérité ...

j'ai couru dans le même problème lorsque j'ai mis à jour mes sites de jQuery version 1.4.2 à 1.8.3. Le problème semble être dans la façon dont la boîte de fantaisie déterminé si le boxModel est présent, via ce code:

ieQuirks = $.browser.msie && !$.boxModel;

Dans les versions les plus récentes de .boxModel retourne jQuery $ non définie (il a été dépréciée en 1.3) qui est Falsey , rendant le test vrai pour tous les navigateurs. En utilisant $ .support.boxModel plutôt que $ boxModel résolu le problème pour moi:

ieQuirks = $.browser.msie && !$.support.boxModel;

Maintenant, ces blocs de code ne sont pas entrés à moins qu'il est l'un des navigateurs destinés.