是否可以从使用者与PHP 检测到IE处于兼容模式?
我使用IE10并拥有useragent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
因此它显示为Internet Explorer 7。
当然,仅依靠PHP的这种检测是一个坏主意,但它对某些情况非常有用(例如使用PHP或调试提示进行日志记录,......)
答案 0 :(得分:5)
从此资源:http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
要在兼容模式而不是常规IE 7中检测IE 10,您应该查看标识IE 10的令牌Trident/6.0
,无论模式如何。
要从PHP检测它,请从标头中抓取用户代理并解析它以获取Trident/6.0
字符串标记。
您可以从Trident令牌识别更多版本的Internet Explorer:IE9具有Trident/5.0
,IE 8具有Trident/4.0
,IE 7在其用户代理中没有Trident。
可以在$_SERVER['HTTP_USER_AGENT']
找到用户代理字符串。从那里搜索内部子字符串或使用正则表达式是非常简单的。
IE10用户代理参考:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)
请注意,MSIE令牌不同,但Trident令牌是相同的。这表示用户已启用兼容模式。
答案 1 :(得分:2)
不,不是。
首先,compat模式的重点在于它假装是指定了旧版本的IE。默认情况下,UA字符串会更改为其中一部分,并且与正在模拟的旧IE版本的真实副本提供的UA字符串相同。
其次浏览器模式(即呈现模式)和文档模式(即用户代理)可以在开发工具中单独设置;它可能处于IE8 compat模式,但仍然显示IE10用户代理。
简而言之,尝试使用UA字符串检测compat模式是一个坏主意;它根本不可能,即使有可能,它也很容易被欺骗。
但是,您实际上不应该有正当理由这样做。如果您的站点告诉IE将页面显示为compat模式,那么服务器应该已经知道了;它不应该检查。有一些边缘情况会出现意外情况,但您可以使用X-UA-Compatible
元标记解决这些问题。
最佳做法是尽可能避免竞争模式;如果你已经正确地编写了你的网站,那么compat模式应该是完全没必要的。如果您确实发现自己需要它,那么最好修复代码以便在IE10中正常工作。