2010-06-08 63 views
4

我试图实现图像panner我发现here Chrome根据请求的文件的扩展名呈现不同的文档。我创建了一个测试用例,它在而不是命名为测试的文件时起作用。 XHTML铬渲染js根据文件的扩展名渲染[包括testcase]

您可以从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的被发送应用程序/ 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配置,但面临的Servlet将文件作为application/xhtml + xml提供服务我想我可以在Web应用程序中添加一个过滤器,将Content-Type修改为text/html,但这有点冒险。

为什么JSF与Facelets的不提供文件服务为html?或者如何去做?

更新发现如何为别人服务的text/html从JSF。您需要

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

<html>后和前<head>

现在它按预期工作中铬中。

+0

使用带有text/html的XHTML文档类型没有任何好处,它只会强制浏览器进入怪癖模式。 为了服务XHTML,并将其解析为XML,您必须**将其作为“application/xhtml + xml”提供。为什么不使用HTML5文档类型?这是更宽容,并兼容后退和前进.. – 2010-06-08 15:49:43

+0

顺便说一句,你打开本地或通过网络服务器?如果在本地,则Chrome可能会尝试根据扩展名猜测内容类型。 – 2010-06-08 15:51:20

+0

@Sean在本地和通过网络服务器(Tomcat)都有同样的问题。 – pakore 2010-06-08 16:00:32

回答

2

我不确定,但我知道的是,当您在Chrome中使用本地文件上的.xhtml扩展名时,则使用XML解析器解析该文件,并且如果您使用.html扩展名一个本地文件,然后使用HTML解析器进行解析。

这是很容易证明的。在每个文件的底部添加<span>,以使其非XML格式良好并尝试打开它。你会得到一个很大的警告信息,说它只能处理与.xhtml文件有关的错误,但它会在.html文件中被忽略。

(顺便说一句,DOCTYPE对此没有任何影响任何责任。)

相当为什么当XML解析目前还不太清楚这是行不通的,但它可能会下降到jQuery使用innerHTML属性的事实有些情况下,这些情况不应与XML解析的DOM一起使用。

+0

你是对的,我做了“跨度”的事情,它没有正确渲染。查看我的更新。谢谢。 – pakore 2010-06-09 08:00:39

+0

最后,我发现答案感谢您的提示。我设法正确配置了页面的内容类型。虽然拉撒路也是对的,但你的业力较低,所以我接受你的问题来传播业力财富:P。 – pakore 2010-06-09 11:09:27

2

的DOCTYPE表示使用什么样的标准,与XHTML的一个DOCTYPE一个HTML文件被处理为XHTML。不知道为什么Chrome与扩展名为.xhtml的行为不同,它可能会强制某种默认的DOCTYPE并忽略其中包含的内容。 XHTML现在已经被HTML 5所取代,不确定你当前的路由是否是你想要的,尽管XHTML将在HTML 5浏览器中呈现。

+0

这是我用jsf做的事情的测试用例。 AFAIK jsf尚未呈现html5。除了html5还没有完成,对吧?感谢您的答案,但我不知道为什么Chrome会忽略内容类型的标签。 – pakore 2010-06-08 15:42:24

+0

正如@Sean_Kinsey所述,HTML5文档类型既是向前兼容的,也是向后兼容的(即,不会因指定而破坏任何内容)。你想使用什么特别的XHTML? – Lazarus 2010-06-08 15:59:15

+0

拉撒路,我终于修好了。感谢您的提示。如果我可以将你的问题标记为有效,我会这么做! – pakore 2010-06-09 11:10:07