为什么这个JavaScript只在Opera中执行?

时间:2011-06-07 13:39:10

标签: javascript html

我正在尝试构建一个干净地将HTML表示与JavaScript行为分开的网站。

为了获得这方面的经验,我创造了一个简单的“Hello,world!”网站有一个页面和一个行为。该页面包含“Hello,world!”消息,JavaScript通过警告框向用户显示类似的消息。

为了实现这一点,我在我的本地机器上创建了两个名为index.html和sayhello.js的文件。

HTML文件index.html包含:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
    <title>Hello, world!</title>
  </head>
  <body>
    <h1>Helo, world!</h1>
    <p>That's all for now.</p>

    <script type="text/javascript" src="sayhello.js"/>
  </body>
</html>

JavaScript文件sayhello.js包含:

alert('Hello, world!');

我的操作系统是Windows 7。

我在Opera 11中打开index.html并看到“Hello,world!”页面打开后会立即弹出对话框。

在Firefox 4,Chrome 11和IE 9中,我没有看到弹出窗口。好像JavaScript被忽略了。

为什么警报框不会出现在所有浏览器中?我该怎样做才能让它全部显示出来?

3 个答案:

答案 0 :(得分:11)

<script>标记不是自动关闭的。你需要写

<script type="text/javascript" src="sayhello.js"></script>

答案 1 :(得分:1)

几乎所有浏览器都不喜欢script代码的自动结束标记。

所以只需将其替换为:

<script type="text/javascript" src="sayhello.js"></script>

答案 2 :(得分:0)

在看到其他简洁的答案之后,我做了一些阅读,发现根本问题是我混淆了HTML和XML构造。

根据这个post from the WebKit team,HTML中的自闭标签可能会起作用,因为HTML解析器可以处理错误,而不是因为它们理解自动关闭语法:

  

首先是XML和XHTML   标准化,不支持浏览器   他们原生。至少启用   部分使用XHTML,W3C出现了   用“HTML兼容的东西”   XHTML”。这是一套指导方针   用于制作有效的XHTML文档   仍然可以或多或少地被处理为   HTML。基本的想法是使用   标签的自动关闭语法在哪里   HTML不需要关闭标记,例如   img,br或link,带有额外空间   在斜线之前。所以我们一直很受欢迎   图像示例如下所示:   <img src="funfun.jpg" />。细节   在附录C中描述   XHTML 1.0标准。

     

重要的是要注意这一点   一种黑客,取决于德   HTML的事实错误处理行为   解析器。他们真的不明白   XML自我关闭语法,但是   用这种方式写东西就是这样   将/视为属性,然后   放弃它,因为它不合法   属性名称。如果你试图这样做的话   类似的东西,他们不会   理解div应该是   是空的。

似乎对我来说最安全的事情就是长期关闭所有标签。