zoukankan      html  css  js  c++  java
  • start tag, end tag issues in IE7, particularly in xslt transformation

        IE7对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>
      
    </head>
      
    <body>
      a
      
    <br />
      b
      
    <br />
      c
      
    </body>
    </html>
        但如果你象下面一样在head标签里添加一个script文件的引用,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>
        
    <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标签的关闭情况了。
        如果使用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如下
    <!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处理器的原则是,只要标签里面没有内容,在输出中,它就不会单独生成一个关闭标签,而是针对原标签上使用/>来进行关闭。
        对于这个问题,在xslt中没有什么优雅的方式可以针对IE7进行修正,只能够象下面这样处理
    <xsl:text disable-output-escaping="yes">
      
    &lt;script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"&gt;&lt;/script&gt;
    </xsl:text>
        通过xsl:text,指定disable-output-escaping属性,禁止xslt对这段文本进行转义,从而达到目的。
        这段时间比较倒霉,什么事情都被撞见了。
  • 相关阅读:
    1月28日 layout_list_item
    1月27日 listview_MyListAdapter
    1月26日 listviewxml
    1月25日 textview
    1月24日 人月神话3
    体温填报(三)
    体温填报(二)
    体温填报(一)
    家庭记账本(六)
    家庭记账本(五)
  • 原文地址:https://www.cnblogs.com/RicCC/p/790771.html
Copyright © 2011-2022 走看看