我有以下问题:
可插入协议处理程序提供HTML文件。
这些文件没有正确的doctype
- 文档类型完全缺失。我无法改变这一点,这些文件来自第三方。
所以我想使用“X-UA-Compatible: IE=edge
”标题来设置doctype。当我从真正的网络服务器上执行此操作时,它按预期工作。当我通过IHttpNegotiate::OnResponse
从协议处理程序执行此操作时,它不起作用。
我尝试添加更多标题,例如“Content-Type
”,当然还有“HTTP/1.1 200 OK
”,直到我报告从真正的网络浏览器收到的所有标题 - IE仍设置{{1到5。
有人对此有一些想法吗?
以下是我正在尝试的内容:
documentMode
整个代码可以在github找到。
干杯
imagiro
答案 0 :(得分:2)
据我所知,当你错过了doctype时,它会触发Quirks模式,并且胜过使用X-UA-Compatible
设置模式的任何其他尝试。
所以简短的回答是你提出的解决方案不起作用。
对不起。
我能想到的唯一其他解决方案是将整个事物包装成iframe。 IE只能为页面使用单一渲染模式,包括任何嵌入的帧。这意味着如果父页面处于标准模式,那么任何iframe也将处于标准模式,即使它们通常处于怪异模式或兼容模式。
我最近看到一些问题抱怨这个问题,人们试图将新代码插入旧的怪癖模式网站,反之亦然,并且无法为iframe指定模式。但在您的情况下,这可能对您有利,因为如果您可以将内容注入iframe,那么您将有效地将页面装配到您喜欢的任何模式,具体取决于您为此指定的模式父页面。让iframe填满整个页面,你就有了解决方案。
这是我能想到强制你的页面进入标准模式的唯一方法。
当然,如果您可以注入doctype会更容易,如果原始第三方提供商可以修复其代码以包含doctype,那就更容易了。
令我感到困惑的是,如果它不包含doctype并且第三方提供了类似的东西,那么它们必须以这种方式进行测试,所以可能他们期望它以怪癖模式运行?鉴于此,将其强制纳入标准模式的动机是什么?