jQuery + Mootools, conflitti e trucchetti

Lavorando su un template per Drupal che utilizza Mootools mi sono accorto di alcuni problemi. Questa libreria va in conflitto con jQuery (utilizzata dal motore di Drupal) rendendo non funzionanti opzioni come i blocchi a scomparsa o l'autocompletamento in alcune caselle di testo.

Il problema è da cercarsi nel codice delle due librerie: entrambe dichiarano una funzione:

$()

Ovviamente le due funzioni sono differenti per cui bisogna trovare un rimedio per poter conciliare le due librerie.

Per risolvere (temporaneamente) ho modificato la libreria Mootools che sto usando nel template, rinominando ogni occorrenza della funzione:

sed -i 's/\$(/\$moo(/' mootools.v1.00.js

Tra l'altro ho avuto un effetto collaterale (di poco conto): con quella sostituzione ho rinominato anche la funzione

$$()

in

$$moo()

Ora il template funziona (quasi): sia l'effetto grafico fornito da Mootools, sia le funzionalità di jQuery.

Mi rimane solo da analizzare e risolvere il comportamento anomalo di Mozilla Firefox: Firebug mi segnala un errore e la visualizzazione delle pagine non è corretta, l'effetto di Mootools non funziona nelle pagine che usano jQuery mentre su IE6/7 e Konqueror funzionano tutto correttamente.

Questo è l'errore segnalato da Firebug:

this.events[type].keys has no properties

Temo sia più un problema di Firefox che non del codice JS. Dovrò approfondire la questione.

AGGIORNAMENTO 1:
Ho controllato il codice delle due librerire ed un po' di documentazione, in pratica sia jQuery che Mootools usano il metodo:

domready()

Tale metodo dovrebbe essere eseguito una volta sola dal browser, in realtà Konqueror e IE6/7 probabilmente sono meno rigorosi di Firefox che esegue solo l'istanza di jQuery.

Al posto di usare questo metodo per inizializzare le funzioni di Mootools, le ho richiamate con il classico "onload" all'interno del tag body:

<body onload="init()">

Ma anche questo non funziona, probabilmente per lo stesso motivo di prima, non ho verificato ma credo che "onload" utilizzi il metodo domready() per richiamare il codice.

AGGIORNAMENTO 2:
I ragazzi in #mootools (irc.freenode.net) hanno confermato i miei timori: Mootools e jQuery non possono coesistere. Apparentemente sembra che jQuery sovrascriva alcuni metodi di Firefox per fare determinate operazioni, Mootools in questa situazione non riesce a funzionare correttamente.

Ciao, io non ho mai usato strani trucchetti o cambiato le librerie, ma ho sempre notato che i conflitti o i problemi spesso sono causati dall'ordine con cui vengono inclusi gli script nelle pagine, esempio includere prima gli script di jquery e poi quelli di mootools.

Confermo a tutti che per risolvere tali problemi basta caricare prima la libreria jquery e poi mootools. Funziona al 99% dei casi!

Molto interessante, due anni fa non era semplice come ora :-)

facile risolvere il problema basta sostituire tutti i "$" nelle funzioni di jquery con "jQuery" es:
"
$("#slider").easySlider({
auto: true,
continuous: true,
speed: 800,
pause: 6000
});
"
con
"
jQuery("#slider").easySlider({
auto: true,
continuous: true,
speed: 800,
pause: 6000
});
"

ciao

io ho il problema far coesistere due java script... inserendo le varianti a $ il tool la riconosce ma cmq non fa l'effetto desiderato ti allego il codice...HELP MEEEEEEEEEE

var JQ = jQuery.noConflict();
// Usa jQuery con $j(...)
$j(document).ready(function(){
$j("#foto").show("slow");
});
// Codice di una libreria con $(...)
// ...

/* */
function MM_goToURL() { //v3.0
var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}