Pregunta

Tengo un problema con una página en la que intento obtener colorbox (una especie de caja de luz para jQuery) trabajando. Aparentemente no funciona debido a que document.body es null en FireFox (3.5.3). Este no es el caso en Safari (4.0.3) donde funciona el colorbox.

Algo que me llama la atención es que (estoy usando Drupal 6) drupal ha agregado una etiqueta de script para establecer algunas variables de JavaScript en la parte inferior de la página, debajo del cuerpo de cierre y las etiquetas html. De lo contrario no veo un problema. Lamentablemente, tengo muchos problemas para que no lo haga. ¿Podría ser esto lo que causa que FF tenga problemas con el cuerpo?

El uso de archivos de ejemplo de colorbox en Firefox funciona (y el $() se define allí).

¿Hay alguna forma de usar jQuery para rellenar la propiedad <=> con algo de <=> quizás, o debería seguir golpeando en drupal para no poner una etiqueta de script fuera de las etiquetas html (más fácil decirlo que hacerlo)?

Para aclarar, <=> es <=> incluso después de que la página haya terminado de cargarse. Aquí hay una captura de la consola Firebug:

>>> document.body
null
>>> $().attr('body')
null
¿Fue útil?

Solución

La razón habitual document.body es nula es porque está ejecutando el script antes de que se encuentre la etiqueta <body> (*). Sin ver el código no puedo decir con certeza, pero esa sería la razón habitual. Muévete donde has puesto los guiones.

(*: u otro elemento como <p> que el navegador sabe que no puede ocurrir fuera de un cuerpo, en cuyo caso agrega silenciosamente un </body> para corregir el marcado que falta. Una diferencia en el análisis de ciertos por lo general, las etiquetas en el cuerpo podrían explicar por qué Safari le permite salirse con la suya).

  

¿Podría ser esto lo que está causando que FF tenga problemas con el cuerpo?

No. Es un marcado roto y Drupal no debería hacerlo, pero cerrar el document.getElementsByTagName('body')[0] no deja de $('body') hacer referencia al nodo DOM adecuado.

  

¿Hay alguna forma en que pueda usar jQuery para rellenar el document.body

No, <=> solo refleja básicamente lo mismo que <=>, por lo que tratar de configurarlo no es sensato, y si no puede encontrar un cuerpo con <=>, jQuery no podrá encontrar con <=> tampoco.

Otros consejos

No debería haber ninguna salida de Drupal debajo de la etiqueta del cuerpo. Verifique su archivo de temas page.tpl.php. El final debería verse más o menos así:

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

</body>
</html>

No debería haber una declaración de impresión debajo de la salida de la variable de cierre de $, ya que esta debe ser la última salida de contenido (pero aún dentro de el cuerpo).

¿No usas otro framework JS junto con jQuery? Si es así, ¿se ocupó de cómo cargar ambas bibliotecas para que sigan siendo compatibles (orden, corrección de compatibilidad ...)?

Bueno, esto es extraño, pero solo agregando esta línea en la parte inferior de mi $(document).ready(function(){}); arreglé lo que estaba rompiendo el cuerpo:

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

Pero tendré que ver más por qué se rompió en primer lugar, y también por qué no se rompió en el safari.

lo siento, esta respuesta no está en jquery (he estado luchando con algo similar en las últimas horas con el prototipo).

Básicamente, la respuesta principal de bobince es bastante útil, sin embargo, puede reasignar el cuerpo del documento que el truco es encontrarlo.

Este es un prototipo pero tienes la idea,

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

Cuando el contenido es un elemento definido en la página que puede encontrar con los selectores habituales, se puede usar cualquiera, realmente no importa, desde allí se desplaza hacia la parte superior y luego hacia abajo y hacia el elemento del cuerpo.

Espero que eso ayude, como dije, mi problema era solo similar, no estoy seguro de cómo te irá esto, pero espero que al menos desencadene una idea para alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top