要将内容附加到文档,您应该只document.write()
在 <script>-block 解析阶段调用。
如果您调用了document.write
它在该上下文之外执行的某个地方,例如在您的事件处理程序中,则不会进行解析,因此该字符串无处'foo'
可去。
根据原始 JavaScript 参考应该发生的是:
事件处理程序在原始文档关闭后执行,因此如果您没有在事件处理程序中显式发出 document.open 方法,则 write 方法会隐式打开 mimeType text/html 的新文档。
也就是说,它假设您犯了一个错误并且打算这样做:
document.open('text/html');
document.write(html);
它将整个文档替换为新内容。您还会注意到,因为您没有通过调用完成该操作:
document.close();
...在 Firefox 中,“正在加载”的 throbber 仍然处于动画状态,期望将更多内容写入文档(但它永远不会出现)。
在这种情况下,您正在document.write()
输入一个字符串:
Hello bobince! How are you today?
这显然不是一个有效的 HTML 文档。Chrome(和 Safari,行为相同)试图将其解析为 HTML 文档,但由于它是文档元素 (<html>) 之外的非空白文本内容而失败,这是不允许的。如果您在名称输入中放置一些标签:
Hello <em>bobince</em>! How are you today?
你会看到 <em> 元素之外的所有东西都被丢弃了。Firefox 和 IE 设法应用他们的“修复任何元素之外的文本”损坏的 HTML 规则来拯救你,但 Chrome 没有。
如果你想要document.write()
一个新文件,你应该确保它确实是一个完整的文件:
<html><head><title>Greetings</title><body><p>Hello bobince! How are you today?</p></body></html>
或者,如果你想要document.write()
一个文本字符串,理论上你应该调用:
document.open('text/plain');
在 write() 之前。但请注意,Chrome 或 Safari 不支持 mimetype 参数;他们将始终将您编写的内容视为 HTML。
无论如何,您可能不想使用这种方法。如果您想添加(或更改)现有页面,您通常应该使用 DOM 方法,例如在状态输出 div 上设置文本,或使用 innerHTML 替换正文内容。
document.write()
在一些地方需要(特别是当您从头开始创建新窗口或框架时),但否则通常是错误的,应该怀疑。