Domanda

Ho un problema con una pagina in cui sto cercando di ottenere colorbox (una specie di lightbox per jQuery) funzionante. Apparentemente non funziona perché document.body è null in FireFox (3.5.3). Questo non è il caso di Safari (4.0.3) in cui la colorbox funziona.

Qualcosa che mi salta fuori è che (sto usando Drupal 6) drupal ha aggiunto un tag script per impostare alcune variabili JavaScript nella parte inferiore della pagina, sotto il corpo di chiusura e tag html. Altrimenti non vedo un problema. Sfortunatamente ho molti problemi a non farlo. Potrebbe essere questo che sta causando problemi con l'organismo FF?

L'uso dei file di esempio di colorbox in Firefox funziona (e qui $() è definito).

Esiste un modo in cui potrei usare jQuery per riempire la proprietà <=> con qualcosa da <=> forse, o dovrei continuare a battere su drupal per non mettere un tag di script fuori dai tag html (più facile a dirsi che a farsi)?

Per chiarire <=> è <=> anche dopo aver completato il caricamento della pagina. Ecco un'acquisizione della console Firebug:

>>> document.body
null
>>> $().attr('body')
null
È stato utile?

Soluzione

Il solito motivo document.body è null perché si esegue lo script prima che il tag <body> (*) sia stato rilevato. Senza vedere il codice non posso dirlo con certezza, ma sarebbe la solita ragione. Sposta dove hai inserito gli script.

(*: o un altro elemento come <p> che il browser conosce non può verificarsi al di fuori di un corpo, nel qual caso aggiunge silenziosamente un </body> per correggere il markup mancante. Una differenza nell'analisi di alcuni i tag di solito nel corpo potrebbero spiegare perché Safari ti consente di cavartela.)

  

Potrebbe essere questo che sta causando problemi FF con il corpo?

No. È un markup rotto e Drupal non dovrebbe farlo, ma la chiusura di document.getElementsByTagName('body')[0] non interrompe $('body') il riferimento al nodo DOM corretto.

  

Esiste un modo per usare jQuery per riempire il document.body

No, <=> riflette solo sostanzialmente lo stesso di <=>, quindi provare a impostarlo non è sensato e se non riesci a trovare un corpo con <=>, jQuery non sarà in grado di trovare con <=>.

Altri suggerimenti

Non dovrebbe esserci alcun output da Drupal sotto il tag body. Controlla i tuoi temi page.tpl.php file. La fine dovrebbe essere simile a questa:

<!-- BEGIN closure: must always be last element in body -->
    <?php print $closure; ?>
<!-- END closure -->

</body>
</html>

Non ci dovrebbero essere dichiarazioni di stampa al di sotto dell'output della variabile $ closing, in quanto deve essere l'ultimo output del contenuto (ma comunque all'interno di nel corpo).

Non usi un altro framework JS insieme a jQuery? In tal caso, ti sei preso cura di come caricare entrambe le librerie in modo che rimangano compatibili (ordine, correzione della compatibilità ...)?

Beh, questo è strano, ma l'aggiunta di questa riga nella parte inferiore del mio $(document).ready(function(){}); risolto tutto ciò che stava rompendo il corpo:

  if(null==document.body){document.body = $('body')[0];}

Ma dovrò guardare di più sul motivo per cui si è rotto in primo luogo e anche perché non si è rotto nel safari.

scusate se questa risposta non è in jquery (ho lottato con qualcosa di simile nelle ultime due ore con il prototipo).

Fondamentalmente, la risposta migliore di Bobince è abbastanza utile, tuttavia puoi riassegnare il corpo del documento che il trucco sta trovando.

Questo è un prototipo ma hai l'idea,

body = $("content").ancestors().last().children[1];

Laddove il contenuto è un elemento definito nella pagina che puoi trovare con i soliti selettori, qualsiasi può essere usato, non importa, da lì attraversi verso l'alto e poi verso il basso e lungo verso l'elemento body.

Spero che sia d'aiuto, come ho detto, il mio problema era solo simile, non sono sicuro di come andrà per te, ma spero che almeno scateni un'idea per qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top