JavaScript:如果IE7或IE8兼容模式,我可以检测IE9吗?
我需要知道如果浏览器通过用户代理string标识为IE7或IE8真的是那些浏览器,或者是否在IE9在7或8兼容模式。
从我在用户代理string中可以看到的一个在IE7兼容模式下的IE9,为真实的IE7提供了一个相同的string。 是否有一个额外的属性/元素/对象,我可以testing,看看它是真的“真的”变相的IE9?
我假设文档模式将无法帮助,因为我的脚本加载到的页面可能是强迫怪异或强制一个特定的设置。
我希望IE9将有一些存在的属性,可testing,无论是在7,8或9模式。
编辑添加…
好的,我明白我现在要去哪里了。 我正在使用“浏览器模式”下拉菜单,并将其切换到IE8和IE7,并认为这是“IE8兼容模式”和“IE7兼容模式”分别。 这当然是不正确的。 开发人员工具的浏览器模式确实是将其切换为“像”那些旧的浏览器,所以只报告原始的useragentstring。
如果我将浏览器模式保留在IE9或IE9兼容性下,并尝试使用文档模式下拉变体,那么我确实会在所有8种组合(两种浏览器模式和4种文档模式)下都显示“Trident / 5.0”。 我只需要避开select浏览器模式IE7和IE8,因为他们真的是(模拟)IE7和IE8。
因此,页面,非开发人员用户,元标记或Microsoft的兼容性列表将无法将IE9置于无法识别的状态。
只要使用if(navigator.userAgent.indexOf("Trident/5")>-1)
就足够了。
不要担心,这不适用于样式,格式,逻辑或页面内容。 我使用function检测这些东西。 我只需要检测IE9(不pipe它在哪个模式),并做出一个非页面内容的决定。
感谢您的build议和链接指导我的答案。
实际上用IE9在IE7兼容模式下运行的用户代理string是不同的,所以这是区分不同IE版本的最好方法之一。
介绍IE9的用户代理string :
与IE8类似,IE9的兼容性视图将映射到IE7标准模式,而在兼容性视图中IE9的UAstring将是:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)
在兼容性视图中,IE9通过应用程序版本号(Mozilla / 4.0)和版本令牌(MSIE 7.0)将自身报告为IE7。 这是为了兼容性而完成的。 从“Trident / 4.0”到“Trident / 5.0”,递增的Trident令牌允许网站区分在Compat View中运行的IE9和在Compat View中运行的IE8 。
(强调加我)。 因此,用户代理string与报告自己是“Mozilla / 4.0”和MSIE 7.0相同,但IE9将始终是Trident / 5.0 – 无论是MSIE 7.0,MSIE 8.0还是MSIE 9.0。
其实你应该看看这个伟大的编译: 浏览器ID(用户代理)string ,甚至更好的useragentstrings.com
document.documentMode
是文档模式的最佳方式。
IE7不包含任何关于Trident的信息
User-Agent : Mozilla/4.0 (compatible; MSIE 7.0)
IE8包含这个string:“Trident / 4.0”
User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0)
IE9包含这个string:“Trident / 5.0”
IE9兼容模式:
User-Agent : Mozilla/4.0 (compatible; MSIE 7.0; Trident/5.0)
IE9在正常模式下:
User-Agent : Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)
这是IE9所有浏览器和文档模式的表格 :
我希望IE9将有一些存在的属性,可testing,无论是在7,8或9模式。
检查例如style.opacity ,它是在IE9中引入的,无论兼容模式如何:
<![if IE]> <script> if(typeof document.documentElement.style.opacity!='undefined') { //this must be at least IE9 } </script> <![endif]>
有时需要从服务器variables中读取用户代理string,而不是从JavaScript导航器对象中读取。
比较差异:
-
ASP经典, IE11
-
客户端javascript,navigator.userAgent:“ Mozilla / 5.0(compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 7.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; BOIE9; ENUS) “
-
服务器ASP,Request.ServerVariables(“HTTP_USER_AGENT”):“ Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; BOIE9; ENUS; rv:11.0)像Gecko ”
-
-
ASP经典, IE11兼容模式 :
-
客户端javascript,navigator.userAgent:“ Mozilla / 5.0(compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 7.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; BOIE9; ENUS)) “
-
服务器ASP,Request.ServerVariables(“HTTP_USER_AGENT”):“ Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.1; WOW64; Trident / 7.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; BOIE9; ENUS) “
-
从https://stackoverflow.com/a/29288153/2879498
假设你有一个ID为compat-warning的隐藏元素:
Javascript w / jQuery:
$(function(){ function showCompatWarning() { $('#compat-warning') .css('display','block') .css('height','auto') .show(); } var tridentOffset = navigator.appVersion.indexOf('Trident/'); if ( tridentOffset === -1 ) return; var jscriptVersion = 0; /*@cc_on @*/ /*@if (@_jscript) jscriptVersion = @_jscript_version ; @*/; /*@end @*/ var tridentVersion = parseInt(navigator.appVersion.substr(tridentOffset+8),10); var guessIEVersion = tridentVersion + 4; if (( document.documentMode && jscriptVersion && jscriptVersion < 10 && jscriptVersion !== document.documentMode ) || ( document.compatMode && document.compatMode === 'BackCompat') || ( document.documentMode && document.documentMode < 10 && document.documentMode != guessIEVersion )) showCompatWarning(); });
检测和警告,你的第一道防线和最后一道防线兼容地狱。