2010-05-13 6 views
7

J'ai un site web utilisant le framework prootype et je cherche à utiliser un plugin jquery. Tout fonctionne juste pas dans IE8. Cela fonctionne dans IE7 qui m'étonne. Une idée de ce qui peut-être mal?jquery noConflict ne fonctionne pas dans IE8 seulement

IE8 me donne l'objet ne supporte pas cette propriété ou méthode où ligne jQuery.noConflict(); est

<script src="/my/docs/jquery.js" type="text/javascript"></script> 
<script src="/my/docs/jquery.simplyscroll.js" type="text/javascript"> </script> 
<script type="text/javascript"> 
jQuery.noConflict(); 
function OpenUp(sURL){ 
    window.open(sURL,null,'height=560,width=820,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,scrollbars=yes',false); 
} 
jQuery(document).ready(function($) { 
$("head").append("<link>"); 
css = $("head").children(":last"); 

css.attr({ 
    rel: "stylesheet", 
    type: "text/css", 
    href: "/my/docs/jquery.simplyscroll.css" 
    }); 

    $("#scroller").simplyScroll({ 
     autoMode: 'loop', 
     framerate: 1, 
     speed: 1 
    }); 
}); 
</script> 

J'ai aussi fatigué les éléments suivants: var $j = jQuery.noConflict(); var j = jQuery.noConflict();

everythig fonctionne pas dans IE8 seul.

+1

Pouvez-vous montrer le code complet, y compris où vous incluez jquery et le plugin noconflict? –

+0

Je modifie le code. J'ai le script src avec dans le corps. – slik

+0

Cela semble se produire si noConflict() est appelé avec un délai. Voir aussi http://forum.jquery.com/topic/jquery-and-prototype-conflicts-in-ie8-wh-loading-jquery-after-settimeout-noconflict-doesn-t-help (modération en attente à partir du moment) de ce commentaire) – ripper234

Répondre

1

Ive a eu un problème simular dans le passé et a travaillé autour d'elle en utilisant la balise meta Emulate IE7

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

Je ne suis pas sûr que ce soit le meilleur travail autour cependant.

+1

Ne le prends pas personnellement mais c'est une idée terrible. La fonction "noConflict" fonctionne très bien dans IE8. – Pointy

0

J'ai eu des problèmes étranges dans le passé avec IE8 sur des machines avec plusieurs versions d'Internet Explorer installées. Dans mon cas, une erreur s'est produite lorsque j'ai essayé d'ouvrir un lien dans une nouvelle fenêtre via javascript. Le même code a bien fonctionné sur IE6 et 7, et une machine avec seulement IE8 installé l'a bien fonctionné aussi bien.

0

Ceci est un problème que j'ai également découvert. La façon dont je l'ai réparé était de mettre à jour mon jQuery à 1.4. La version 1.3.2 échoue avec un prototype plus récent sur IE8. Désolé cette réponse est en retard.

6

J'ai déjà utilisé ceci en utilisant jQuery-1.4.4.js. Tout fonctionne bien sauf dans IE8. IE8 ne reconnaît rien jQuery(). J'ai été capable de résoudre le problème en chargeant jQuery et en exécutant $ .noconflict() avant de charger Prototype et tout fonctionne bien sur tous mes navigateurs de test, y compris IE8. Cette séquence est contraire à la documentation de jQuery et donc je suis nerveux à ce sujet. Impossible de trouver quelque chose sur le site jQuery à ce sujet.

t22harris

+0

Je peux confirmer que j'obtenais des erreurs d'objet null avec jQuery 1.4.4 sous IE8 lorsque Prototype a été chargé en premier. Je charge maintenant jQuery en premier et fait immédiatement 'noConflict()' et maintenant mon application fonctionne à nouveau! –

+0

Merci, en déplaçant jQuery et l'appel '$ .noConflict()' avant que les autres bibliothèques ne le résolvent pour moi aussi. Le même problème et la même solution s'appliquent à jQuery-1.5. Il me semble que c'est lié à la détection de document.ready pour IE .. – meyertee

0

J'ai exactement la même erreur avec 1.4.4 et 1.4.3 chargement jquery après prototype et seulement dans IE8, même dans IE7 ou IE6 Jquery 1.4 résolu pour moi.

2

La seule façon j'ai pu résoudre ce problème, pour IE8 (ce qui était le seul avec le problème) et d'autres navigateurs était de mettre jQuery et l'appel noConflict() dans la tête immédiatement après l'initialisation de l'autre bibliothèque . Comme si:

<script type="text/javascript" src="/path/to/prototype.js"></script>

<script type="text/javascript" src="/path/to/jquery.js"></script>

<script type="text/javascript">var $j = jQuery.noConflict(); </script>

... suivi par tout autre scripts qui utilisent soit jQuery ou Prototype.

2

J'ai eu un problème similaire. La solution que j'utilise actuellement consiste à enregistrer la variable $ dans une variable temporaire, en chargeant jquery (je charge jquery à partir du code js), en exécutant le code dépendant de jquery (avec jQuery.noConflict), en redéfinissant la variable $.

C'est sale, mais il semble avoir fait l'affaire pour moi.

Ma fonction qui ajoute jquery (le cas échéant) est:

function getJQueryAndGo(callback) { 
    var thisPageUsingOtherJSLibrary = false; 
    var tempDollar = $; 
    // Only do anything if jQuery isn't defined 
    if (typeof jQuery == 'undefined') { 
     if (typeof $ == 'function') { 
      thisPageUsingOtherJSLibrary = true; 
     } 
     loadToHead('script','http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js', function() { 
      if (typeof jQuery=='undefined') { 
        //alert('Super failsafe - still somehow failed...') 
      } else { 
       jQuery.noConflict(); 
       (function($) { 
        callback($); 
       })(jQuery); 

      } 
     }); 
    } 
    else 
    { // jQuery was already loaded 
     jQuery.noConflict(); // This may not be necessary 
     (function($) { 
      callback($); 
     })(jQuery); 
    } 

    $ = tempDollar; 
} 

Le loadToHead charge simplement le script dans la balise de tête quelque part et exécute la fonction de rappel lorsque le script est chargé.

La plupart de ce code que j'ai trouvé en ligne et l'a tweeté. Malheureusement, je ne me souviens pas où donner le crédit dès maintenant.

1

Juste eu le même problème. IE 8 n'aime pas:

var jQuery = jQuery.noConflict(); 

changé à:

var jq = jQuery.noConflict(); 

a bien fonctionné.

Questions connexes