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.

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente
  • You may use [inline:xx] tags to display uploaded files or images inline.
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Questa domanda è per evitare lo spam