Question

J'ai un problème avec une page où j'essaie d'accéder boîte de couleur (une sorte de lightbox pour jQuery) fonctionne.Apparemment, cela ne fonctionne pas à cause du document.body être null dans FireFox (3.5.3).Ce n'est pas le cas dans Safari (4.0.3) où fonctionne la colorbox.

Ce qui me saute aux yeux, c'est que (j'utilise Drupal 6) Drupal a ajouté une balise de script pour définir certaines variables JavaScript tout en bas de la page, sous le corps de fermeture et les balises html.Sinon je ne vois pas de problème.Malheureusement, j'ai beaucoup de mal à faire en sorte qu'il ne fasse pas cela.Serait-ce cela qui cause des problèmes corporels à FF ?

L'utilisation des fichiers d'exemple de colorbox dans Firefox fonctionne (et le document.body y est défini).

Existe-t-il un moyen d'utiliser jQuery pour remplir le document.body propriété avec quelque chose de $() peut-être, ou devrais-je continuer à cliquer sur Drupal pour ne pas mettre de balise de script en dehors des balises HTML (plus facile à dire qu'à faire) ?

Pour clarifier le document.body est null même une fois le chargement de la page terminé.Voici une capture de la console Firebug :

>>> document.body
null
>>> $().attr('body')
null
Était-ce utile?

La solution

La raison habituelle document.body est nul, c'est parce que vous exécutez le script avant le <body> tag(*) a été rencontré.Sans voir le code, je ne peux pas le dire avec certitude, mais ce serait la raison habituelle.Déplacez-vous là où vous avez placé les scripts.

(* :ou un autre élément tel que <p> dont le navigateur sait qu'il ne peut pas se produire en dehors d'un corps, auquel cas il ajoute silencieusement un <body> pour corriger votre balisage manquant.Une différence dans l'analyse de certaines balises habituellement présentes dans le corps pourrait expliquer pourquoi Safari vous permet de vous en sortir.)

Serait-ce cela qui cause des problèmes corporels à FF ?

Non.C'est un balisage cassé et Drupal ne devrait pas le faire, mais fermer le </body> ne s'arrête pas document.body faisant référence au nœud DOM approprié.

Existe-t-il un moyen d'utiliser jQuery pour remplir le document.body

Non, document.body ne fait que refléter fondamentalement la même chose que document.getElementsByTagName('body')[0], donc essayer de le définir n'est pas raisonnable, et si vous ne trouvez pas de corps avec document.body, jQuery ne pourra pas le trouver avec $('body') soit.

Autres conseils

Il ne devrait y avoir aucune sortie de Drupal sous la balise body.Vérifiez vos thèmes page.tpl.php déposer.La fin devrait ressembler à ceci :

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

</body>
</html>

Il ne devrait y avoir aucune instruction print sous la sortie de la variable $closure, car il doit s'agir de la dernière sortie de contenu (mais quand même dans le corps).

N'utilisez-vous pas un autre framework JS avec jQuery ?Si oui, avez-vous veillé à comment charger les deux bibliothèques pour qu'elles restent compatibles (ordre, correctif de compatibilité...) ?

Eh bien, c'est étrange, mais il suffit d'ajouter cette ligne au bas de mon $(document).ready(function(){}); réparé ce qui cassait le corps :

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

Mais je devrai examiner davantage pourquoi il s'est cassé en premier lieu, et aussi pourquoi il ne s'est pas cassé lors du safari.

désolé, cette réponse n'est pas en jquery (j'ai eu du mal avec quelque chose de similaire au cours des dernières heures avec un prototype).

Fondamentalement, la première réponse de Bobince est très utile, mais vous peut réaffectez le corps du document, l'astuce consiste à le trouver.

C'est un prototype mais vous voyez l'idée,

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

Lorsque le contenu est un élément défini sur la page que vous pouvez trouver avec les sélecteurs habituels, n'importe lequel peut être utilisé, cela n'a pas vraiment d'importance, à partir de là, vous parcourez vers le haut, puis vers le bas et jusqu'à l'élément body.

J'espère que cela aide, comme je l'ai dit, mon problème était similaire, je ne sais pas comment cela se passera pour vous, mais j'espère que cela déclenchera au moins une idée pour quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top