IE8及之后的版本为了兼容针对老版本IE而编写的网页,使用了”兼容性视图设置”,并内置了很多模式(Browser Mode)。IE会根据doctype, meta, http response header, IE设置(ref1)(ref2)等来选择一个模式来渲染。
新写的页面都应该遵循标准且用html5 doctype,这样大多数情况下IE都会使用标准模式来渲染。但这次写的是内部系统,处于Intranet环境下。很多IE的兼容性视图设置都勾选了”在兼容性视图中显示Intranet站点”。当IE勾选了这个选项后,会忽略页面meta标签的指示。是否有一种可控的方法override掉这个设置呢?答案是肯定的。方式就是在HTTP的响应中加入X-UA-Compatible头。
一般X-UA-Compatible可以在Web Server例如Apache或Nginx中设置,但有可能一个Web Server不同的应用程序需要不同兼容性视图设置。根据实际情况,我选择在Django里加入这个header。
已经有人写好Django的Middleware了,按照其说明安装好Middleware,在IE刷新即可看到结果。
参考资料:
- Defining Document Compatibility
- Activating Browser Modes with Doctype
- X-UA-Compatible Django Middleware