为什么Firefox中的document.body == null而不是Safari

dla*_*lin 5 firefox jquery colorbox drupal-6 document-body

我有一个页面的问题,我正在尝试使用colorbox(一种jQuery的灯箱)工作.由于document.body存在nullFireFox(3.5.3),它显然不起作用.在颜色框工作的Safari(4.0.3)中不是这种情况.

跳出来的东西是(我正在使用Drupal 6)drupal附加了一个脚本标记,用于在页面的最底部,在结束体和html标记下面设置一些JavaScript变量.否则我没有看到问题.不幸的是,我很难让它不这样做.可能是因为这导致FF与身体有问题吗?

在Firefox中使用colorbox的示例文件确实有效(并且在document.body那里定义).

有没有什么方法可以使用jQuery来重新填充document.body属性$(),或者我应该继续敲打drupal而不是将脚本标记放在html标签之外(说起来容易做起来难)?

为了澄清的document.bodynull页面加载完成后也.这是一个Firebug控制台捕获:

>>> document.body
null
>>> $().attr('body')
null
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 9

通常的原因document.body是null是因为您在<body>遇到标记(*)之前执行脚本.没有看到代码我不能肯定地说,但这是通常的原因.移动放置脚本的位置.

(*:或<p>浏览器知道的其他元素不能在体外发生,在这种情况下,它会默默地添加一个<body>来修复丢失的标记.解析某些通常在体内标记的差异可能会解释为什么Safari允许你逃脱它.)

可能是因为这导致FF与身体有问题吗?

不.它是破坏的标记,Drupal不应该这样做,但关闭它</body>并不会停止document.body引用正确的DOM节点.

有没有办法可以使用jQuery来重新填充document.body

不,document.body只是反映基本相同document.getElementsByTagName('body')[0],所以试图设置它是不明智的,如果你找不到一个体document.body,jQuery将无法找到它$('body').