Chrome отображает js по-разному, в зависимости от расширения файла для рендеринга. - PullRequest
4 голосов
/ 08 июня 2010

Я пытался реализовать панель изображений, которую нашел здесь Chrome отображает один и тот же документ по-разному в зависимости от расширения запрошенного файла.Я создал тестовый пример, в котором он работает, когда файл не назван как тестовый. xhtml

Вы можете скачать тестовый пример с здесь

Кто-нибудь знает, почему или как это решить?Я хочу, чтобы мои файлы были .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

Я добавил 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. Думаю, я мог бы добавить фильтр в веб-приложение, изменив Content-Type на text / html, но это немного странно.

Почему JSF с Facelets не обслуживает файлы как HTML?Или как это сделать?

Обновление Нашел, как обслуживать текст / HTML из JSF.Вам нужно добавить

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

после <html> и до <head>

Теперь все работает как положено в Chrome.

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Я точно не уверен, но я точно знаю, что когда вы используете расширение .xhtml для локального файла в Chrome, то файл анализируется с использованием синтаксического анализатора XML, а если вы используете расширение .html длялокальный файл, затем он анализируется с помощью анализатора HTML.

Это легко доказать.Добавьте <span> внизу каждого файла, чтобы он не был правильно сформирован, и попробуйте открыть его.Вы получите большое предупреждающее сообщение о том, что он может обработать ошибку только с файлом .xhtml, но он будет игнорироваться в файле .html.

(Кстати, DOCTYPE не действуетпо этому поводу.)

Вполне понятно, почему это не работает, когда анализ XML не совсем понятен, но это может быть связано с тем, что в некоторых случаях jQuery использует свойство innerHTML, которое не должно работать с XMLпроанализировал DOM.

2 голосов
/ 08 июня 2010

DOCTYPE обозначает, какой стандарт используется, файл .html с DOCTYPE XHTML обрабатывается как XHTML. Не уверен, почему Chrome ведет себя по-разному с расширением .xhtml, он, вероятно, принудительно использует DOCTYPE по умолчанию и игнорирует содержащийся в нем. XHTML был заброшен в пользу HTML 5, но не уверен, что ваш текущий маршрут - тот, по которому вы хотите следовать букве, хотя XHTML будет отображаться в браузере HTML 5.

...