为什么chrome不运行这个javascript

ehf*_*eng 9 javascript google-chrome

当我在Chrome(ver 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>
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 32

要将内容附加到文档,只应document.write()在<script> -block解析阶段调用.

如果你有一个调用document.write它在那个上下文之外执行的地方,比如在你的事件处理程序中,就没有解析,所以没有任何地方'foo'可以去.

根据原始的JavaScript引用应该发生什么:

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

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

document.open('text/html');
document.write(html);
Run Code Online (Sandbox Code Playgroud)

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

document.close();
Run Code Online (Sandbox Code Playgroud)

...在Firefox中,"加载"悸动仍然是动画,期望将更多内容写入文档(但它永远不会出现).

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

Hello bobince! How are you today?
Run Code Online (Sandbox Code Playgroud)

这显然不是一个有效的HTML文档.Chrome(和Safari,其行为相同)试图将其解析为HTML文档,但由于它是文档元素(<html>)之外的非空白文本内容而失败,这是不允许的.如果在名称输入中放入一些标记:

Hello <em>bobince</em>! How are you today?
Run Code Online (Sandbox Code Playgroud)

你会看到<em>元素之外的所有内容都被丢弃了.Firefox和IE设法应用他们的"修复任何元素之外的文本"破坏HTML规则来拯救你,但Chrome没有.

如果您想要document.write()一个新文档,您应该确保它确实是一个完整的文档:

<html><head><title>Greetings</title><body><p>Hello bobince! How are you today?</p></body></html>
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要document.write()一个文本字符串,理论上你应该调用:

document.open('text/plain');
Run Code Online (Sandbox Code Playgroud)

在write()之前.但请注意,Chrome或Safari不支持mimetype参数; 他们总是将你写的内容视为HTML.

无论如何,您可能不希望使用此方法.如果要添加(或更改)现有页面,通常应使用DOM方法,例如在状态输出div上设置文本,或使用innerHTML替换正文内容.

document.write() 在一些地方需要(特别是当你从头开始创建一个新的窗口或框架时),但是否则它通常是错误的,应该被怀疑地看待.


Jim*_*mmy 9

不要使用document.write.如果你把它改成类似的东西

if (name != null && name != "") {
    document.getElementById('foo').innerHTML = "Hello " + name + "! How are you today?";
}

<body>
<input ...

<div id='foo'> </div>
</body>
Run Code Online (Sandbox Code Playgroud)

document.write有很奇怪的行为.您希望将文本写入哪里?

  • document.write是1995年 (2认同)