在一些现有代码中,通过检查对象Browser.Engine.trident是否已定义并返回true,进行测试以查看用户是否正在运行IE。
但是如何确定用户是在运行IE6(或更早版本)还是运行IE7(或更高版本)?
在JavaScript函数中需要进行测试,因此条件注释似乎不合适。
答案 0 :(得分:18)
来自msdn的detecting Internet Explorer More Effectively:
function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
if ( ver >= 6.0 )
msg = "You're using a recent copy of Internet Explorer."
else
msg = "You should upgrade your copy of Internet Explorer.";
}
alert( msg );
}
答案 1 :(得分:12)
如果你真的想确定你使用的是IE和特定的版本,那么显然你可以使用IE的条件标签只在IE中运行某些代码。它不是那么漂亮,但至少你可以肯定它真的是IE而不是一些欺骗版本。
<script>
var isIE = false;
var version = -1;
</script>
<!--[if IE 6]>
<script>
isIE = true;
version = 6
</script>
<![endif]-->
<!--[if IE 7]>
<script>
isIE = true;
version = 7
</script>
<![endif]-->
这是非常自我解释的。在IE6中,isIE
为true
而version
为6
,在IE7中,isIE
为true
,version
为7
}否则isIE
为false,version
为-1
或者你可以使用jQuery中的代码来推广你自己的解决方案。
var userAgent = navigator.userAgent.toLowerCase();
var version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
var isIE = /msie/.test( userAgent ) && !/opera/.test( userAgent ),
答案 2 :(得分:4)
如果你已经在1.9之前的版本中使用了jQuery并且你不需要检测IE 11,你可以这样做:
if (jQuery.browser.msie == true) {
if (jQuery.browser.version == 7.0)
// .. do something for 7.0
else
// .. do something for < 7.0
}
答案 3 :(得分:3)
Navigator对象包含有关用户浏览器的所有信息:
例如:
var browser = navigator.appName;
var b_version = navigator.appVersion;
var version = parseFloat(b_version);
请参阅:
答案 4 :(得分:3)
如果您要检查某项功能,则应直接检查,例如: if (window.focus) {window.focus();}
浏览器检测永远不够可靠。
有关对象与浏览器检测的更多详细信息,请check out this article at Quirksmode。
另一方面,如果您需要的功能是浏览器类型和版本,例如出于统计目的,请使用navigator.appName
和navigator.appVersion
。 (请注意 - 许多不那么受欢迎的浏览器将自己伪装成MSIE 6或7,因为某些网站在“所有现代浏览器都是IE,对吧?”的前提下阻止任何不是IE的东西。(提示:不再)。)
答案 5 :(得分:3)
因此IE8兼容性视图模式将自身报告为IE7,即使它并不总是表现相同。为此,我给你这个怪物:
// IE8's "Compatibility mode" is anything but. Oh well, at least it doesn't take 40 lines of code to detect and work around it.
// Oh wait:
/*
* Author: Rob Reid
* CreateDate: 20-Mar-09
* Description: Little helper function to return details about IE 8 and its various compatibility settings either use as it is
* or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is
* very common so use with caution.
*/
function IEVersion(){
var _n=navigator,_w=window,_d=document;
var version="NA";
var na=_n.userAgent;
var ieDocMode="NA";
var ie8BrowserMode="NA";
// Look for msie and make sure its not opera in disguise
if(/msie/i.test(na) && (!_w.opera)){
// also check for spoofers by checking known IE objects
if(_w.attachEvent && _w.ActiveXObject){
// Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7
version = (na.match( /.+ie\s([\d.]+)/i ) || [])[1];
// Its IE 8 pretending to be IE 7 or in compat mode
if(parseInt(version)==7){
// documentMode is only supported in IE 8 so we know if its here its really IE 8
if(_d.documentMode){
version = 8; //reset? change if you need to
// IE in Compat mode will mention Trident in the useragent
if(/trident\/\d/i.test(na)){
ie8BrowserMode = "Compat Mode";
// if it doesn't then its running in IE 7 mode
}else{
ie8BrowserMode = "IE 7 Mode";
}
}
}else if(parseInt(version)==8){
// IE 8 will always have documentMode available
if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";}
}
// If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions
ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5
}
}
return {
"UserAgent" : na,
"Version" : version,
"BrowserMode" : ie8BrowserMode,
"DocMode": ieDocMode
}
}
var ieVersion = IEVersion();
var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8;
答案 6 :(得分:2)
这可能会被拒绝,因为它没有直接回答问题,但是......你应该不编写特定于浏览器的代码。在为最广泛接受的浏览器编码时,你几乎无法做到。
编辑:我发现有条件评论的唯一时间是我需要包括ie6.css或ie7.css。
答案 7 :(得分:1)
嗯......这是我想了一会儿后才出现的。只是想找到一个简单的解决方案。
if (navigator.appName == 'Microsoft Internet Explorer') {
// Take navigator appversion to an array & split it
var appVersion = navigator.appVersion.split(';');
// Get the part that you want from the above array
var verNumber = appVersion[1];
alert(verNumber);
}
返回ex: - MSIE 10.0,MSIE 9.0,MSIE 8.0
进一步扩展,如果你想检查它是“低于”还是“大于”IE版本,你可以稍加修改
if (navigator.appName == 'Microsoft Internet Explorer') {
var appVersion = navigator.appVersion.split(';');
var verNumber = appVersion[1];
// Reaplce "MSIE " from the srting and parse it to integer value
var IEversion = parseInt(verNumber.replace('MSIE ', ''));
if(IEversion <= 9){
alert(verNumber);
}
}
从w3schools得到了基本想法,希望这会对某人有所帮助......:D
答案 8 :(得分:0)
这是我使用的脚本,它似乎运作良好:
// Returns 0 if the browser is anything but IE
function getIEVersion() {
var ua = window.navigator.userAgent;
var ie = ua.indexOf("MSIE ");
return ((ie > 0) ? parseInt(ua.substring(ie+5, ua.indexOf(".", ie))) : 0);
}
希望有人帮助......
答案 9 :(得分:0)
这应该会为您提供比您想要的更多详细信息:
var agent = navigator.userAgent;
var msiePattern = /.*MSIE ((\d+).\d+).*/
if( msiePattern.test( agent ) ) {
var majorVersion = agent.replace(msiePattern,"$2");
var fullVersion = agent.replace(msiePattern,"$1");
var majorVersionInt = parseInt( majorVersion );
var fullVersionFloat = parseFloat( fullVersion );
}
答案 10 :(得分:0)
因为似乎还没有人说过:
在JavaScript函数中需要进行测试,因此条件注释似乎不合适。
您可以轻松地在函数内部添加条件注释 - JScript条件注释,而不是HTML注释:
function something() {
var IE_WIN= false;
var IE_WIN_7PLUS= false;
/*@cc_on
@if (@_win32)
IE_WIN= true;
@if (@_jscript_version>=5.7)
IE_WIN_7PLUS = true;
@end
@end @*/
...
}
虽然在全球范围内进行一次测试更为典型,但之后只需检查存储的标志。
CC比筛选User-Agent字符串最近成为的混乱更可靠。 navigator.userAgent上的字符串匹配方法可能会错误识别欺骗性浏览器,例如Opera。
当然,对于可能的跨浏览器代码,功能嗅探要好得多,但在某些情况下 - 通常是错误修复解决方法 - 你需要专门识别IE,而CC可能是今天最好的方法。 / p>
答案 11 :(得分:0)
<script>
alert("It is " + isIE());
//return ie number as int else return false
function isIE() {
var myNav = navigator.userAgent.toLowerCase();
if (myNav.indexOf('msie') != -1) //ie less than ie11 (6-10)
{
return parseInt(myNav.split('msie')[1]);
}
else
{
//Is the version more than ie11? Then return false else return ie int number
return (!!(myNav.match(/trident/) && !myNav.match(/msie/)) == false)?false : parseInt(myNav.split('rv:')[1].substring(0, 2));
}
}
</script>