代码之家  ›  专栏  ›  技术社区  ›  pakore

chrome根据要呈现的文件的扩展名呈现不同的js[包含测试用例]

  •  4
  • pakore  · 技术社区  · 14 年前

    我试图实现我发现的一个图像panner here chrome根据所请求文件的扩展名不同地呈现相同的文档。我已经创建了一个测试用例,当文件 命名为测试。 XHTML

    您可以从下载测试用例 here

    有人知道为什么或如何解决它吗?我希望我的文件是.xhtml 在IE和FF中工作正常。

    代码: test.html/test.xhtml(更改名称以查看它是否适用于其中一个,但不适用于另一个)。

    <!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" lang="en" xml:lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
    <style type="text/css">
    /*Default CSS for pan containers*/
    .pancontainer {
        position: relative; /*keep this intact*/
        overflow: hidden; /*keep this intact*/
        width: 300px;
        height: 300px;
        border: 1px solid black;
    }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://www.dynamicdrive.com/dynamicindex4/imagepanner.js"></script>
    </head>
    <body>
    <div class="pancontainer" data-orient="center" data-canzoom="yes" style="width: 350px; height: 200px; float: left; position: relative; overflow-x: hidden; overflow-y: hidden; cursor: move; "><img src="./test_files/image.jpg" style="position: absolute; width: 700px; height: 525px; left: -175px; top: -163px; display: block;" />
    </div>
    </body>
    </html>
    

    更新: 显然,由于这些注释,Tomcat正在将application/xhtml+xml作为内容类型发送。

    HTTP_TRANSACTION_READ_RESPONSE_HEADERS  
    --> HTTP/1.1 200 OK            
    Server: Apache-Coyote/1.1  
    X-Powered-By: JSF/1.2      
    Pragma: no-cache           
    Cache-Control: no-cache    
    Cache-Control: no-store    
    Cache-Control: must-revalidate
    Expires: Mon, 8 Aug 2006 10:00:00 GMT
    Content-Type: application/xhtml+xml;charset=UTF-8
    Transfer-Encoding: chunked 
    Date: Wed, 09 Jun 2010 07:39:30 GMT
    

    我已将一个mime类型添加到 web.xml :

    <mime-mapping>
    <extension>xhtml</extension>
    <mime-type>text/html</mime-type>
    </mime-mapping> 
    

    但仍然不起作用。我相信 FacesServlet 正在读取文件扩展名并发送内容类型,覆盖中的配置 Web.XML

     <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.xhtml</url-pattern>
     </servlet-mapping>
    

    我试图修改web.xml配置,将.xhtml改为.html,但是faces servlet将文件作为application/xhtml+xml提供服务。我想我可以在webapp中添加一个过滤器,将内容类型改为text/html,但这有点不正常。

    为什么带facelets的JSF不作为HTML提供文件?或者怎么做?

    更新 找到如何从JSF提供文本/HTML。你需要添加

    <f:view contentType="text/html"/>
    

    之后 <html> 以前 <head>

    现在它可以像预期的那样在铬合金中工作。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Alohci    14 年前

    我不完全确定,但我知道的是,当您在chrome中的本地文件上使用.xhtml扩展名时,将使用XML解析器解析该文件,如果您在本地文件上使用.html扩展名,则使用HTML解析器解析该文件。

    这很容易证明。添加 <span> 在每个文件的底部,使其非XML格式良好,并尝试打开它。您将收到一条巨大的警告消息,表示它只能处理.xhtml文件中的错误,但在.html文件中它将被静默忽略。

    (顺便说一句,doctype对这个没有任何影响。)

    很明显,当XML被解析时,它不起作用,但这可能是因为jquery在某些情况下使用了innerhtml属性,这在XML被解析的doms中不起作用。

        2
  •  2
  •   Lazarus    14 年前

    doctype表示使用哪种标准,doctype为xhtml的.html文件被处理为xhtml。不知道为什么chrome对扩展名.xhtml的行为不同,它可能强制使用某种默认doctype,而忽略了包含的doctype。XHTML现在已经放弃了,取而代之的是HTML5,虽然XHTML将在HTML5浏览器中呈现,但不确定您当前的路线是否是您想要遵循的路线。