xhtml - chrome根据要渲染的文件扩展名不同渲染js【包含testcase】

标签 xhtml jsf google-chrome content-type facelets

我试图实现一个我发现的图像平移器 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 作为 Content-Type 发送。
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

我在 web.xml 中添加了一个 MIME 类型:
<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 添加一个过滤器,将 Content-Type 修改为 text/html但这有点hacky。

为什么带有 Facelets 的 JSF 不将文件作为 html 提供?或者怎么做?

更新 找到了如何从 JSF 提供 text/html。你需要添加
<f:view contentType="text/html"/>

之后 <html>及之前 <head>
现在它在 chrome 中按预期工作。

最佳答案

DOCTYPE 表示使用哪种标准,DOCTYPE 为 XHTML 的 .html 文件被处理为 XHTML。不知道为什么 Chrome 与扩展名 .xhtml 的行为不同,它可能强制使用某种默认 DOCTYPE 并忽略包含的 DOCTYPE。 XHTML 现在已被放弃,转而支持 HTML 5,不确定您当前的路线是否是您想要遵循的路线,尽管 XHTML 将在 HTML 5 浏览器中呈现。

关于xhtml - chrome根据要渲染的文件扩展名不同渲染js【包含testcase】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998727/

相关文章:

javascript - 外部 JS 文件在 XHTML 中不起作用

javascript - 如何拦截来自 Google Chrome 扩展程序的代理身份验证对话框?

javascript - 如何在 Webdriver 脚本中禁用/避免 xdg-open 弹出窗口

html - 将 html 页面渲染到 gtkwindow

css - 在 XHTML 页面上定位对象

java - 从 JSP 弹出窗口获取值后,JSP 页面值未填充

java - 验证失败后重置 selectOneMenu 表单值

java - JSF 2 单击按钮时执行操作

html - Chrome 与 box-sizing :border-box in a display:table

html - 为什么 <p> 标签中不能包含 <div> 标签?