IE7兼容模式与兼容视图
作者:sohighthesky 来源:博客园 发布时间:2010-06-28 18:48:00
阅读之前:
在看文章具体内容之前,希望你可以 先打开IE8,打开http://www.taobao.com,然后在地址栏里输入:
javascript:alert(document.documentMode +navigator.userAgent);void(0)
看到结果后不知道你有没觉得惊奇,反正我是觉得很奇怪的,因为页面meta里没有兼容标记, fiddler查看 http头里也没有X-UA-Compatible标记,网站到底为什么会运行在ie7模式下呢?
IE7兼容模式 与 兼容视图
昨天在看口碑的一篇 iframe高度自适应 时,发现它给的demo与我本的demo在ie8中运行结果不一样,在线的结果明显跟在IETester7中一样,也查看 过,meta里没有兼容标记, fiddler查看 http头里也没有X-UA-Compatible标记,可是为什么在线的结果与本地的会不一样呢?这样我就郁闷了,再一看,发现在线demo在IE8中没有显示“兼容视图”按钮,想想肯定是这个的原因.
后来找到一篇文章 Just The Facts: Recap of Compatibility View 虽然没解决问题,但内容不错,分享一下,引用其中一段话:
Compatibility View and the X-UA-Compatible tag are not equivalent
Compatibility View is something you do on the client. It affects three things: the User Agent string, the Version Vector (used in evaluation of conditional comments), and what mode DOCTYPEs that trigger Standards map to – IE8 Standards or IE7 Standards. The X-UA-Compatible <META> tag / header is something you use in page content / server-side and, when present, completely overrides Compatibility View settings on the client. It affects two things: the Version Vector and what mode DOCTYPEs that trigger Standards map to. It can’t affect the UA string as it’s already too late to change that – the client’s already made the GET request to the server (and it contains a UA string). What this means to developers is that if your site pivots on the User Agent string, adding just the X-UA-Compatible tag (to cause IE8 to display your site in IE7 Standards mode) won’t make your website compatible – you’ll also need to update your User Agent string detection logic as well.
意思是说,兼容视图起三个作用:
UserAgent
版本标识(包括条件注释)
文档 类型
而meta标记只起两个作用:1.版本,2.文档 类型
(这里说meta标记不影响UserAgent应该是指服务端的ua,因为客户端请求已经发送,并且包含了ua,所以不会影响 ,不过客户端的ua还是受影响 了,显示ie7 )
更正:
(可能之前测试有误)客户端的ua也不影响 ,只会影响document.documentMode
另外:
<META> tag / header分别 指:<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">和在服务端添加http头,比如.net配置文件中:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
另外也可以到IIS或者 Apache中添加http头:
问题解决
到这里了文章开始的问题还是没有解决,昨晚无意间看到秦歌的一篇用doctype激活浏览器模式,中提到 微软的黑名单站点列表中也会启用兼容模式,记得上面那文章第二条评论中有一个:res://iecompat.dll/iecompatdata.xml(IE8 only哦),将这个地址输入到ie8中会显示:Compatibility View list,这样在这个列表中终于找到口碑和淘宝的域名,于是我想这应该就是本文开始时问题的答案了,你也可以在这个列表中随便找一个域名,打开,在地址栏输入文章开始那那段javascript(ps:微软这个列表也太多了吧,将这么多站点弄成IE7。。)
其它参考链接:


猜你喜欢
- 1. PHP入侵检测系统PHP IDS(即PHP-入侵检测系统)是一套易于使用、结构良好、速度出色且专门面向PHP类Web应用程序的先进安全
- 什么是XML?XML 指可扩展标记语言(eXtensibleMarkupLanguage)。 你可以通过本站学习XML教程XML 被设计用来
- #Pyton中让两个值互换的实现方法#方法一:可以理解为相当于是同时赋值a = 5b = 4a,b = b,aprint(a,b)#方法二:
- 这个decorator是什么意思呢?很简单,它接受一个log的参数,即传入logger对象。然后它会先把函数名打印出来,接下来,会利用enu
- 对于管理系统,常常需要展示列表数据,我们对于列表内的数据常常需要查找、过滤、排序等操作,其中查找等操作大部分是在后台进行的。django r
- 用于序列化的两个模块json:用于字符串和Python数据类型间进行转换pickle: 用于python特有的类型和python的数据类型间
- 写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下。方便使用1. C++ 读取文件#include<stdio
- 如果用到数据筛选功能,可以使用x if condition else y的逻辑实现。如果使用的是纯Python,可以使用不断迭代的方式对每一
- 一、动机(Motivate)为什么要使用中介者模式呢?如果不使用中介者模式的话,各个同事对象将会相互进行引用,如果每个对象都与多个对象进行交
- 介绍在Python语言中最常见的括号有三种,分别是:小括号()、中括号[]、花括号{};其作用也不相同,分别用来代表不同的Python基本内
- 序篇天气真的很热啊… 很想有一杯冰冰凉凉的奶茶来解渴~但是现在奶茶店这么多, 到底哪一家最好喝、性价比最高呢?数据获取
- 1.获取function形参个数functionName.length2.较适用的运算符delete:删除以前定义的对象属性或方法的引用vo
- 在源环境中启动CLion需要告知CLion ROS特定的环境变量。通过运行来源工作空间时,将在当前shell中检索这些变量source ./
- 通过win32 COM接口实现软件的操作本质上来看跟直接操作软件一致,这跟我之前经常用的通过各种扩展的组件或者库实现各种文件的处理有较大的差
- 引言上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不
- 1. 前言中文分词≠自然语言处理!HanlpHanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。H
- 1.什么是解构?ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。它在语法上比ES5所提供的更加简洁、紧凑、清晰。
- 一、条件判断 if ( ) { } elsif ( ) {&nb
- 项目要求:读完题目,首先我们要确定程序思路我们要全部通过类去实现也就是 我们要实现管理员、学生、讲师、课程、教师五个类管理员类class A
- NumPy 是一个Python 库,用于 Python 编程中的科学计算。在本教程中,你将学习如何在 NumPy 数组上以多种方式添加、删除