可插拔协议处理程序中的IE和怪癖模式

时间:2013-11-06 12:53:02

标签: internet-explorer quirks-mode pluggableprotocol

我有以下问题:

可插入协议处理程序提供HTML文件。

这些文件没有正确的doctype - 文档类型完全缺失。我无法改变这一点,这些文件来自第三方。

所以我想使用“X-UA-Compatible: IE=edge”标题来设置doctype。当我从真正的网络服务器上执行此操作时,它按预期工作。当我通过IHttpNegotiate::OnResponse从协议处理程序执行此操作时,它不起作用。

我尝试添加更多标题,例如“Content-Type”,当然还有“HTTP/1.1 200 OK”,直到我报告从真正的网络浏览器收到的所有标题 - IE仍设置{{1到5。

有人对此有一些想法吗?

以下是我正在尝试的内容:

documentMode

整个代码可以在github找到。

干杯
imagiro

1 个答案:

答案 0 :(得分:2)

据我所知,当你错过了doctype时,它会触发Quirks模式,并且胜过使用X-UA-Compatible设置模式的任何其他尝试。

所以简短的回答是你提出的解决方案不起作用。

对不起。

我能想到的唯一其他解决方案是将整个事物包装成iframe。 IE只能为页面使用单一渲染模式,包括任何嵌入的帧。这意味着如果父页面处于标准模式,那么任何iframe也将处于标准模式,即使它们通常处于怪异模式或兼容模式。

我最近看到一些问题抱怨这个问题,人们试图将新代码插入旧的怪癖模式网站,反之亦然,并且无法为iframe指定模式。但在您的情况下,这可能对您有利,因为如果您可以将内容注入iframe,那么您将有效地将页面装配到您喜欢的任何模式,具体取决于您为此指定的模式父页面。让iframe填满整个页面,你就有了解决方案。

这是我能想到强制你的页面进入标准模式的唯一方法。

当然,如果您可以注入doctype会更容易,如果原始第三方提供商可以修复其代码以包含doctype,那就更容易了。

令我感到困惑的是,如果它不包含doctype并且第三方提供了类似的东西,那么它们必须以这种方式进行测试,所以可能他们期望它以怪癖模式运行?鉴于此,将其强制纳入标准模式的动机是什么?