代码之家  ›  专栏  ›  技术社区  ›  Robert Rossney

如何让IE7打开XHTML文件?

  •  3
  • Robert Rossney  · 技术社区  · 16 年前

    我正在构建的一个应用程序正在生成XHTML文档,这些文档将以多种不同的方式分发,包括电子邮件。我可以在Firefox或Chrome中打开这些文档(我所说的“打开”是指从Windows资源管理器打开,而不是通过web服务器)。不过,对于IE7,我遇到了两个——可能是三个——不同的问题。

    如果文件以“.xhtml”扩展名命名,则IE将启动,然后关闭。有时它还在任务管理器中运行,我不得不终止它。有时候不是。

    如果我用扩展名“.htm”或“.html”命名它们,那么它们会正常打开,只是IE信息栏显示它已经阻止了某种类型的内容。这些文档不包含任何脚本、iframe或对象—它们是尽可能简单的XHTML。它们甚至不引用外部CSS。

    当我为其开发此文档的客户打开 他的 environment(他现在只使用“.xhtml”扩展名),IE打开它们并将它们呈现为XML文档。

    我在Google上花了相当长的时间试图弄清这一点,而我发现的一切都与在HTTP报头中指定MIME类型有关,这并不是特别有用,因为我实际上没有为这些文件提供服务。

    所有文件(似乎)都具有正确的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 回复  |  直到 16 年前
        1
  •  5
  •   Robert Rossney    16 年前

    IE7 doesn't actually support strict XHTML .

    具体来说,如果您为它提供内容类型为XHTML的 application/xhtml+xml ,它会变成“噢,新的XHTML东西,我对此一无所知”,并将其视为XML文档。另一方面,如果为它提供内容类型为XHTML的 text/html

    有一个了不起的黑客- suggested by the W3C, no less -使IE把它认为是XML的内容呈现为HTML。你基本上只加IE xsl:stylesheet 对文档的处理指令,并引用输出类型为HTML的XSLT标识转换。其他浏览器会忽略它;IE会将它认为是XML文档的内容(对其本身)进行转换,然后将其呈现为HTML。我不知道对这次黑客攻击是印象深刻还是震惊。

    但是只有当文档能够解析对转换的引用时,这种方法才有效。无论是谁打开这些文件所附的电子邮件,都不一定能做到这一点。我想有一种方法可以将转换包含在XML本身中,但我已经在这方面花了太多时间了。如果我能得到正确的答案,我会花更多的时间,但这只会让我对错误的答案产生不同的味道。

    文本/html ,而.xhtml扩展名意味着 . IE,以及所有使用注册表来确定内容类型的方法,都将这些文档视为 文本/html

        2
  •  2
  •   bobince    16 年前

    IE打开它们并将它们呈现为XML文档。

    我不知道你的设置出了什么问题,也许是一个混乱的文件关联?

    好奇。在你弄清楚IE到底认为什么是活动内容之前,试着插入Web标记来安抚IE。这需要丢失XML prolog,但这只是使用默认值,因此包含它并没有给你任何好处。

    <!-- 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行结尾(至少在第一行)才能使用。啊。

        3
  •  0
  •   ChrisW    16 年前

    .html HKEY_CLASSES_ROOT ,然后尝试克隆它以使 .xhtml 进入。

    < 标准免责声明,关于如何搞乱注册表是危险的 >

        4
  •  0
  •   Perchik    16 年前

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />