2011-05-11 99 views
12

可能重复:
Why don't self-closing script tags work?<script></script> or <script />?

我刚刚发现与HTML的脚本标签一个weired行为。

我的Web服务器是nginx的,我使用FAST CGI和PHP5。我有一个page.html中,它看起来像这样:

<html> 
    <body> 
    <!-- <?php echo 'i am going to add php code here'; ?> --> 
    <script type="text/javascript" src="./my/javascript1.js" /> 
    <script type="text/javascript" src="./my/javascript2.js" /> 
    </body> 
</html> 

如果此页面从web服务器直接送达,Java脚本效果很好。但是,如果它传递给PHP5,似乎只有第一个Java脚本标签被执行。但是,如果我改变脚本块到:

<script type="text/javascript" src="./my/javascript1.js"></script> 
    <script type="text/javascript" src="./my/javascript2.js"></script> 

一切再次工作。注意到标签是如何关闭的?是的,这就是我在这里问的原因。有什么不同?它们应该具有相同的功能/含义。此外,我的网页浏览器(Chrome/IE9)收到的输出HTML是相同的,但为什么对待不同呢?

+2

你是什么意思的“如果它传递给php5”? – Nanne 2011-05-11 06:03:22

+3

进一步阅读:http://stackoverflow.com/questions/69913/why-dont-self-closing-script-tags-work – JohnP 2011-05-11 06:05:00

+0

@Nanne在Nginx中设置句柄,以便页面由PHP5处理。 – davidshen84 2011-05-11 06:28:26

回答

9

脚本标记需要单独的结束标记才能成为有效的代码。见http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1

一些浏览器会接受自行闭合的标签,别人惯于,并且您也使用HTML版本影响的结果。除非使用XHTML,否则不会有自闭标签。

通过PHP引擎传递文件不应该改变的结果,但它是可能的,它使得试图纠正不正确的脚本标记。您应该在浏览器中查看源代码以查看标签是否已更改。

+0

想要回答这部分 - '如果这个页面是直接从Web服务器提供的,那么Java脚本运行良好。但如果它传递给PHP5'?我假设他的意思是PHP vs HTML。 – JohnP 2011-05-11 06:12:23

4

script标签需要关闭标签,即使它使用src属性。避免它导致不希望的行为。

-1

看来您的服务器配置为输出XHTML而不是HTML。 HTML没有<tag />这样的东西。但是XML确实有它们。

在这两种情况下检查文档类型声明。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"等在您的文档的开始。

-3

这在在HTML提到你DocType基本上依赖。

如果DocType被提及transitional XHTML那么它不会允许脚本标记像这样关闭<script ... />。它只会允许标签像这样被关闭。 <script ... ></script>等。

如果DocTYpeXHTML其他东西,将依赖于浏览器的兼容性在这种情况下。

有关参考,请参阅...

http://www.w3schools.com/tags/tag_doctype.asp

+3

这是不正确的。无论使用的是什么HTML版本,总是需要结束标签。 – Guffa 2011-05-11 06:24:13

+0

我上面提到的东西是100%正确(虽然不是书本),但它适用于大多数浏览器(包括IE 6) – 2011-05-11 08:17:20

+1

没有我知道的浏览器允许任何HTML中的

0

您的浏览器解释你的HTML的方式无关,与PHP,因为它不是一个HTML解析器。一些浏览器接受它。别人不......还检查这个link。对于更多Q &关于相同的主题