Как мне получить IE 7 для открытия файлов XHTML? - PullRequest
3 голосов
/ 04 февраля 2009

Приложение, которое я создаю, генерирует документы XHTML, которые будут распространяться разными способами, включая электронную почту. Я могу открыть эти документы в Firefox или Chrome (и «открыть», я имею в виду из Windows Explorer, а не через веб-сервер). Однако в IE 7 у меня две, возможно, три разные проблемы.

Если имена файлов имеют расширение «.xhtml», то IE запускается, а затем закрывается. Иногда он все еще работает в диспетчере задач, и мне приходится его убивать. Иногда нет.

Если я назову их с расширением ".htm" или ".html", то они откроются правильно, за исключением того, что появляется информационная панель IE, сообщающая, что она заблокировала какой-либо контент. Эти документы не содержат никаких сценариев, или фреймов, или объектов - они так же просты, как и XHTML. Они даже не ссылаются на внешний CSS.

Когда заказчик, для которого я разрабатываю это приложение, открывает документы в его среде (на данный момент он просто использует расширение ".xhtml"), IE открывает их и отображает их как документы XML. 1009 *

Я потратил довольно много времени на Google, чтобы попытаться понять суть этого, и все, что я нахожу там, связано с указанием типа MIME в заголовке HTTP, что не особенно полезно, поскольку я ' я на самом деле не обслуживаю эти файлы.

Все файлы (кажется) имеют надлежащие DOCTYPE, инструкции обработки и объявления пространства имен; верхняя часть каждого выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Есть идеи?

Ответы [ 4 ]

5 голосов
/ 05 февраля 2009

Итак, забавная история. IE7 на самом деле не поддерживает строгий XHTML .

В частности, если вы подадите ему XHTML с типом контента application/xhtml+xml, он пойдет «о, этот новомодный материал XHTML, я ничего об этом не знаю» и будет рассматривать его как XML документ. С другой стороны, если вы предоставляете ему XHTML с типом контента text/html, он говорит: «Этот HTML-код довольно забавный, но я могу его подавить».

Существует замечательный хак - , предложенный W3C, не менее - чтобы IE отображал XML-контент в виде HTML. Вы просто добавляете в документ инструкцию обработки только для IE1 xsl:stylesheet и ссылаетесь на XSLT-преобразование идентичности с выходным типом HTML. Другие браузеры игнорируют это; IE преобразует то, что он считает XML-документом (для себя), а затем отображает его как HTML. Я не знаю, будет ли этот взлом впечатлен или потрясен.

Но этот хак работает только тогда, когда документ может разрешить ссылку на преобразование. Тот, кто откроет письмо, к которому прикреплены эти документы, не обязательно сможет это сделать. Я предполагаю, что есть способ включить преобразование в сам XML, но я уже потратил слишком много времени на это. Я бы потратил больше времени, если бы это привело меня к правильному ответу, но это просто привело бы меня к другому типу неправильного ответа.

Так что я собираюсь сделать глупость и назвать файлы с расширением .htm. Настройки реестра сопоставляют расширения файлов с типами контента. Таким образом, расширение .htm означает text/html, а расширение .xhtml означает application/xhtml+xml. IE и все остальное, которое использует реестр для определения типа контента, будут обрабатывать эти документы как text/html, и они будут отображаться, и все это будет работать более или менее. Но я не рад этому.

2 голосов
/ 04 февраля 2009

IE открывает их и отображает как XML-документы.

Это нормально. Если вы хотите распространять XHTML в виде файлов для просмотра в IE, вам придется придерживаться .html.

Я не знаю, что сломано в вашей настройке, возможно, испорчена ассоциация файлов?

Если я назову их с расширением ".htm" или ".html", то они откроются правильно, за исключением того, что появляется информационная панель IE, сообщающая, что она заблокировала какой-либо контент.

Любопытный. Пока вы не выясните, что именно IE считает активным контентом, попробуйте вставить знак Интернета, чтобы смягчить IE. Это требует потери пролога XML, но в любом случае он использует только значения по умолчанию, поэтому, в том числе, он вам ничего не даст.

<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Обратите внимание, что вы должны использовать окончания строки CRLF (по крайней мере, в первой строке), чтобы это работало. Тьфу.

0 голосов
/ 04 февраля 2009

Вы можете попробовать сохранить их как .html, но добавить мета-строку в разделе заголовка, описывающую содержимое как HTMl вместо чего-то активного:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
0 голосов
/ 04 февраля 2009

Посмотрите на запись .html в разделе HKEY_CLASSES_ROOT реестра Windows: затем попробуйте клонировать ее, чтобы создать соответствующую запись .xhtml.

< Стандартный отказ от ответственности о том, насколько опасен беспорядок в реестре >

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...