start tag, end tag issues in IE7, particularly in xslt transformation
IE7对html标签的关闭很敏感,例如下面这段代码可以正常工作
如果使用Visual Studio开发一般不会有这个问题,因为VS将自动、正确的为你的输出标签进行关闭。如果使用其它工具开发html,你需要时刻注意标签的正确关闭。
现在有另一个麻烦的情况,那就是使用xslt转换生成html。例如下面的xslt代码
对于这个问题,在xslt中没有什么优雅的方式可以针对IE7进行修正,只能够象下面这样处理
这段时间比较倒霉,什么事情都被撞见了。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
a
<br />
b
<br />
c
</body>
</html>
但如果你象下面一样在head标签里添加一个script文件的引用,IE7就罢工了<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
a
<br />
b
<br />
c
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
</head>
<body>
a
<br />
b
<br />
c
</body>
</html>
因为script标签没有关闭,IE7无法显示后面的所有内容,不管html使用strict还是compliant模式都一样。一般情况下,如果你发现html的全部或部分内容在IE7下面无法显示出来,而FF、Opera工作正常,则需要检查html标签的关闭情况了。<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
</head>
<body>
a
<br />
b
<br />
c
</body>
</html>
如果使用Visual Studio开发一般不会有这个问题,因为VS将自动、正确的为你的输出标签进行关闭。如果使用其它工具开发html,你需要时刻注意标签的正确关闭。
现在有另一个麻烦的情况,那就是使用xslt转换生成html。例如下面的xslt代码
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"></script>
</head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
经过xslt转换之后生成的html如下<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"></script>
</head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
</head>
<body>
</body>
</html>
可以看到,虽然你在xslt中将script标签按照W3C规范正确关闭了,但是xslt处理器在生成html时,自动将这个关闭改写成IE7无法识别的方式,导致整个html文档在IE7下面出现空白。这就是IE7、xslt处理器和W3C标准之间的不和谐。xslt处理器的原则是,只要标签里面没有内容,在输出中,它就不会单独生成一个关闭标签,而是针对原标签上使用/>来进行关闭。<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
</head>
<body>
</body>
</html>
对于这个问题,在xslt中没有什么优雅的方式可以针对IE7进行修正,只能够象下面这样处理
<xsl:text disable-output-escaping="yes">
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"></script>
</xsl:text>
通过xsl:text,指定disable-output-escaping属性,禁止xslt对这段文本进行转义,从而达到目的。<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"></script>
</xsl:text>
这段时间比较倒霉,什么事情都被撞见了。