为什么 chrome 不运行这个 javascript

2024-02-15

当我在 Chrome(版本 2)中运行它时,它不会返回字符串,但它可以在 Firefox(版本 3)中运行。为什么是这样?

<html>
<head>
<script type="text/javascript">
function disp_prompt() {
    var name=prompt("Please enter your name","Harry Potter");
    if (name!=null && name!="") {
        document.write("Hello " + name + "! How are you today?");
    }
}
</script>
</head>
<body>

<input type="button" onclick="disp_prompt()" value="Display a prompt box" />

</body>
</html>

要将内容附加到文档,您应该只调用document.write()

如果您有电话document.write在该上下文之外执行的某个地方,例如在事件处理程序中,没有进行解析,因此该字符串无处可去'foo' to go.

根据以下规定应该发生什么原始 JavaScript 参考 http://docs.sun.com/source/816-6408-10/document.htm#1221642 is:

事件处理程序在原始文档关闭后执行,因此如果您不在事件处理程序中显式发出 document.open 方法,则 write 方法会隐式打开 mimeType text/html 的新文档。

也就是说,它假设您犯了一个错误并且打算这样做:

document.open('text/html');
document.write(html);

这会将整个文档替换为新内容。您还会注意到,因为您没有通过调用来完成此操作:

document.close();

...在 Firefox 中,“正在加载”的抖动仍在进行,期望将更多内容写入文档(但它从未出现)。

在这种情况下,你是document.write()ing 一个字符串:

Hello bobince! How are you today?

这显然不是一个有效的 HTML 文档。 Chrome(和 Safari,其行为相同)尝试将其解析为 HTML 文档,但失败,因为它是文档元素 () 之外的非空白文本内容,这是不允许的。如果您在名称输入中添加一些标签:

Hello <em>bobince</em>! How are you today?

您将看到 元素之外的所有内容都被丢弃。 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()在某些地方需要(特别是当您从头开始创建新窗口或框架时),但否则它通常是错误的,应该怀疑地看待。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 chrome 不运行这个 javascript 的相关文章

随机推荐