Java Internet explorer 9将无法识别servlet从weblogic服务器发送的doctype,并以文档模式IE7呈现-开始前是否需要额外字符?

Java Internet explorer 9将无法识别servlet从weblogic服务器发送的doctype,并以文档模式IE7呈现-开始前是否需要额外字符?,java,html,servlets,internet-explorer-9,weblogic,Java,Html,Servlets,Internet Explorer 9,Weblogic,问题 当我在本地或服务器上拥有我的页面时,Internet Explorer 9不会以同样的方式考虑。我制作了一个简单的测试页面来突出问题: 编辑:更新了带有元标记和css链接的简单测试页面 <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="css/environmentinfo.css&quo

问题

当我在本地或服务器上拥有我的页面时,Internet Explorer 9不会以同样的方式考虑
。我制作了一个简单的测试页面来突出问题:

编辑:更新了带有元标记和css链接的简单测试页面

<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="css/environmentinfo.css" />
        <meta http-equiv="x-ua-compatible" content="IE=edge"/>
    </head>
    <body>
        <script>
            document.write(document.compatMode);
            document.write('<br/>');
            document.write(document.documentMode);
        </script>
    </body>
</html>

document.write(document.compatMode);
文件。写入(“
”); document.write(document.documentMode);
在IE9中打开本地系统上的文件时,会显示:

CSS1Compat

九,

当我在服务器上部署它时,它显示:

CSS1Compat

七,

服务器

因此,我从weblogic服务器提供文件。它部署在一个简单的war归档中,由默认的servlet提供服务。 本地文件仅由文件系统提供(url栏中的C:…\test.html)

调试信息

我研究了编码(两者相同)和有效字符(通过记事本++和wireshark)

本地文件:

<!DOCTYPE html>\r\n
<html lang="en">\r\n
    <head>\r\n
    </head>\r\n
    <body>\r\n
        <script>\r\n
            document.write(document.compatMode);\r\n
            document.write('<br/>');\r\n
            document.write(document.documentMode);\r\n
        </script>\r\n
    </body>\r\n
</html>
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
document.write(document.compatMode)\r\n
文件。写入(“
”)\r\n document.write(document.documentMode)\r\n \r\n \r\n
服务器响应:

HTTP/1.1 200 OK\r\n
Date: Fri, 13 Mar 2015 12:34:26 GTM\r\n
Accept-Ranges: bytes\r\n
Content-Length: 427\r\n
Content-Type: text/html\r\n
Last-Modified: Fri, 13 Mar 2015 12:29:30 GMT\r\n
X-Powered-By: Servlet/3.0 JSP/2.2\r\n
\r\n
<!DOCTYPE html>\r\n
<html lang="en">\r\n
    <head>\r\n
    </head>\r\n
    <body>\r\n
        <script>\r\n
            document.write(document.compatMode);\r\n
            document.write('<br/>');\r\n
            document.write(document.documentMode);\r\n
        </script>\r\n
    </body>\r\n
</html>
HTTP/1.1 200正常\r\n
日期:2015年3月13日星期五12:34:26 GTM\r\n
接受范围:字节\r\n
内容长度:427\r\n
内容类型:text/html\r\n
上次修改:2015年3月13日星期五12:29:30 GMT\r\n
X-Powered-By:Servlet/3.0 JSP/2.2\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
document.write(document.compatMode)\r\n
文件。写入(“
”)\r\n document.write(document.documentMode)\r\n \r\n \r\n

我看了一些其他类似的问题,发现IE会忽略
,如果前面有任何字符。我检查了html规范,它声明了标题,然后是换行符,然后是文档的开头。因此,似乎没有额外的字符。使用wireshark,我可以看到实际的字节,而且似乎没有任何额外的字符。答案、提示甚至其他需要查看的内容都将不胜感激。

IE可能有一些配置设置覆盖标记中的
。根据:

在Intranet区域中打开的页面可能会受到不同的处理,具体取决于浏览器的配置、是否存在组策略选项以及其他因素

试着检查上面文章中列出的地方

除此之外,您还可以尝试使用
X-UA-Compatible
HTTP头或
标签强制文档兼容模式,具体如下

在某些恶劣的情况下,当标准兼容页面加载到由quirks页面承载的iframe中时,可能需要重新加载iframe以强制其进入正确的文档模式


请注意,一旦IE开始呈现页面,文档模式将最终确定,并且不能动态更改。因此,文档模式上的每个指令都必须尽早出现。例如,正如您已经提到的,
必须是第一行,
X-UA-Compatible
必须是
中的第一个标记。我想说,如果您可以控制服务器端,请使用HTTP头而不是
,以确保它在任何渲染发生之前切换文档模式。

奇怪的是,我以前尝试过meta元素,但它不起作用。而且它似乎没有影响我的test.html,所以我删除了它。您的解决方案完全修复了test.html。不幸的是,这是一个被简化的案例,而实际案例还不起作用。我用最少的添加更新了问题中的测试用例,以便仍然重现问题。我现在已经找到了原因:调试控制台显示
HTML1115:X-UA-Compatible元标记('IE=9')被忽略,因为文档模式已经完成。
这似乎是由于没有将元元素作为头的第一个子元素造成的。从调试信息中,我可以看出两者都在内部网中,但还是要感谢您提供的信息。如果您更新您的答案,包括元标记的位置是重要的(不确定第一个是否是必要的),我将接受。如果你真的知道IE接受meta标签的约束条件,我会非常感动。所以我必须改变什么来修复它:
我修改了答案。一旦IE开始渲染页面,它就必须在某些文档模式下执行该操作,因此在任何实际渲染开始之前,必须显示关于后者的任何说明。这就是背后的逻辑。如果你正在调试一个全球网站的本地版本,你可以通过编辑lmhosts文件添加一个假域名,并欺骗IE将你的本地副本视为来自Internet区域的内容,而不是内联网web应用。