【问题标题】:javascript document.body undefined if not preceded by a document.writejavascript document.body 未定义,如果前面没有 document.write
【发布时间】:2013-12-22 17:28:49
【问题描述】:

使用这个最小的网页:

<html>
<head>
    <title>test</title>
    <script type='text/javascript' src='test.js'></script>
</head>
<body>
</body>
</html>

这个最小的“test.js”脚本失败:

document.body.innerText = 'testje';

document.body 似乎未定义:

0x800a138f - JavaScript runtime error: Unable to set property 'innerText' 
of undefined or null reference

如果在代码行之前添加一个 document.write('blabla') ,它会起作用:

document.write('blabla');
document.body.innerText = 'testje';

这让我很困惑,虽然它看起来很基本。

我是 Javascript 新手,因此欢迎您提供一些解释。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    脚本运行时没有body标签,还没有输出到DOM。

    <html>
    <head>
        <title>test</title>
    </head>
    <body>
        <!-- Place content here -->
        <script type='text/javascript' src='test.js'></script>
    </body>
    </html>
    

    使用document.write时,文档与新内容同步更新,浏览器修正你的错误并添加body元素,这就是document.write之后可用的原因。

    【讨论】:

      【解决方案2】:

      脚本出现在head 中。在运行的时候,还没有遇到body的开头,所以body不存在,无法通过DOM访问。

      document.write 将 HTML 写入文档。在这种情况下,正在写入字符数据。由于head 中不允许使用字符数据,并且head 的结束标记和body 的开始标记是可选的,因此这会结束head 元素并开始body。此时body已经存在并且可以访问了。

      【讨论】:

      • 谢谢昆汀。知识渊博!
      【解决方案3】:

      在声明正文元素并且您的脚本在 &lt;head&gt; 中运行之前,您无法访问它。

      试试这个:window.onload = function(){ document.body.innerText = 'testje'; };

      或者把你的脚本放在&lt;body&gt;下面

      【讨论】:

      • 嗨 andrea.r,这就是我最终修复它的方式。
      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2023-03-19
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多