2010-06-08 65 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