Pergunta

Eu tenho um problema com uma página onde eu estou tentando obter colorbox (uma espécie de mesa de luz para jQuery) de trabalho. Ele não funciona, aparentemente devido à document.body null estar no FireFox (3.5.3). Este não é o caso no Safari (4.0.3) onde as obras Colorbox.

Algo que salta para fora em mim é que (estou usando o Drupal 6) Drupal tem anexada uma tag de script para definir algumas variáveis ??JavaScript na parte inferior da página, abaixo do corpo de fechamento e html tags. Caso contrário, eu não vejo um problema. Infelizmente eu estou tendo um monte de problemas começá-lo a não fazer isso. Poderia ser isso que está causando FF ter problemas com o corpo?

Usando arquivos de exemplo de Colorbox no Firefox funciona (eo document.body é definido lá).

Existe alguma maneira eu poderia usar jQuery para reabastecer a propriedade document.body com algo de $() talvez, ou deveria eu continuo batendo em Drupal para não colocar uma tag de script fora das tags HTML (mais fácil dizer do que fazer)?

Para esclarecer a document.body é null mesmo depois que a página é feito o carregamento. Aqui está uma captura de console do Firebug:

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

Solução

A razão document.body usual é nula é porque você está executando script antes da tag <body> (*) foi encontrado. Sem ver o código Eu não posso dizer com certeza, mas isso seria a razão de costume. Mova onde você colocar os scripts.

(*: ou outro elemento, como <p> que o navegador sabe que não pode ocorrer fora de um corpo, caso em que silenciosamente adiciona um <body> para arrumar sua marcação faltando uma diferença na análise de certos normalmente-in. corpo-Tag pode explicar porque Safari permite-lhe fugir com ele.)

Poderia ser isso que está causando FF ter problemas com o corpo?

No. Está quebrado marcação e Drupal não deve fazê-lo, mas fechando a </body> não document.body parada referenciando o bom nó DOM.

Existe alguma maneira eu poderia usar jQuery para encher o document.body

Não, document.body só está refletindo basicamente o mesmo que document.getElementsByTagName('body')[0], de modo a tentar defini-lo não é sensato, e se você não consegue encontrar um corpo com document.body, jQuery não será capaz de encontrá-lo com $('body') quer.

Outras dicas

Não deve haver qualquer saída do Drupal abaixo da tag body. Verifique se o seu arquivo de temas page.tpl.php. A final deve ser muito parecido com isto:

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

</body>
</html>

Não deve haver nenhuma declaração de impressão abaixo da saída da variável $ fechamento, como isso precisa ser a última saída de conteúdo (mas ainda em do corpo).

Você não usar outro quadro JS junto com jQuery? Se sim, você tomar cuidado de como carregar as duas bibliotecas para que eles permaneçam compatíveis (ordem, correção de compatibilidade ...)?

Bem, isso é estranho, mas apenas adicionando esta linha na parte inferior da minha $(document).ready(function(){}); fixa o que estava quebrando o corpo:

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

Mas eu vou ter que olhar mais para por que ele ficou quebrado em primeiro lugar, e também por isso que não quebrou em safari.

desculpe esta resposta não está em jquery (eu estive lutando com algo semelhante ao longo do último par de horas com protótipo).

Basicamente, a resposta superior de bobince é bastante bastante útil, no entanto você pode re-atribuir o corpo do documento o truque é encontrá-lo.

Esta é protótipo, mas você começa a idéia,

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

Onde o conteúdo é algum elemento definido na página que você pode encontrar com seletores habituais, qualquer pode ser usado isso realmente não importa, a partir daí você atravessar para o topo e, em seguida, para baixo e junto ao elemento do corpo.

Espero que ajude, como eu disse o meu problema só foi semelhante, não sei como isso vai para você, mas espero que, pelo menos, gatilhos uma idéia para alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top