仅仅需要7bytes!参见这篇文章,《32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事
但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见这里 恭喜你,Aleko ,你真是我的偶像!
<script type="text/javascript">
var ie = !-[1,];
alert(ie);
</script>
============================================================================
一、IE靠类似“window.navigator.userAgent.toLowerCase().indexOf("msie")>0”的方法检测,但是ie11i中navigator.userAgent中不再包含“MSIE”关键字!
如果是ie11-,那么window.navigator.userAgent.toLowerCase().indexOf("msie")>0,如果是ie11结果为-1,其他浏览器也是-1。
ie11可以通过导入以下注册表值可给IE附加标识:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform]
"MSIE 7.0"=""
二、用javascript的判断是否是IE11的方法是
function isIE() { //ie,包括ie11
if (!!window.ActiveXObject || "ActiveXObject" in window)
return true;
else
return false;
}
3.支持addEventListener方法了,不需要再区分浏览器。
4.如果将这些 user-agent 字符串与早期版本的 Internet Explorer 报告的字符串进行比较,你会发现以下更改:
- 兼容 ("兼容") 和浏览器 ("MSIE") 令牌已删除。
- "like Gecko" 令牌已添加(以便与其他浏览器一致)。
- 浏览器版本现在由新版本 ("rv") 令牌报告。
这些更改有助于防止 IE11 被(错误)标识为较早的版本。
在极少数情况下,必须唯一地标识 IE11。 使用 Trident 令牌来执行此操作。
5.更具体的变化:http://msdn.microsoft.com/zh-cn/library/ie/dn265032(v=vs.85).aspx
6.不要通过检测浏览器的不同来检测Web 浏览器所支持功能的方法存在,要使用直接检测对该功能的支持
例如:
//通过浏览器不同来确定web浏览器所支持的功能存在的方法:浏览器检测
if (isIE) {
window.attachEvent('onresize', setPosition);
} else {
window.addEventListener('resize', setPosition, false);
}
//直接检测对该功能的支持:功能检测
function registerEvent( sTargetID, sEventName, fnHandler )
{
var oTarget = document.getElementById( sTargetID );
if ( oTarget != null )
{
if ( oTarget.addEventListener ) {
oTarget.addEventListener( sEventName, fnToBeRun, false );
} else {
var sOnEvent = "on" + sEventName;
if ( oTarget.attachEvent )
{
oTarget.attachEvent( sOnEvent, fnHandler );
}
}
}
}
/*
其侧重于功能而非浏览器。 如果用户碰巧使用支持 addEventListener 方法的浏览器(例如,Internet Explorer 9 和许多其他浏览器),则将使用该方法定义事件处理程序。它侧重于基于标准的方法,而非专有方法。 在这种情况下,在尝试使用备用方法前,本示例验证对首选方法(addEventListener 方法)的支持。本示例非常有效,因为它没有假设任何给定浏览器的行为。 这种方法无需为了支持所有(假定的)新版 Internet Explorer 而进行更新,也无需为了支持新的浏览器或设备而进行扩展。 本示例仅侧重于功能的可用性。 这是功能检测和浏览器检测之间的主要区别。在理想情况下,所有的浏览器都将支持相同的标准并以完全相同的方法实施这些标准。 然而,事实上浏览器及其各自对不同标准的实施情况之间存在着很多不同.
*/
JS如何判断包括IE11在内的IE浏览器
判断是否IE浏览器用的是window.navigator.userAgent,跟踪这个信息,发现在开发环境,识别为IE10,但访问服务器则识别为IE11,但IE11的userAgent里是没有MSIE标志的,原因就是这个了。
把判断IE浏览器的方法改成如下就可以了。
function
isIE() {
//ie?
if
(!!window.ActiveXObject ||
"ActiveXObject"
in
window)
return
true
;
else
return
false
;
}
---------------------------------------------------------------------------------------------------------------------------------
使用navigator.userAgent来判断浏览器类型。
1、浏览器版本号函数:
var browserVer=(br.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1];
var browserName=navigator.userAgent.toLowerCase();
if(/msie/i.test(browserName) && !/opera/.test(browserName)){
alert("IE");
return ;
}else if(/firefox/i.test(browserName)){
alert("Firefox");
return ;
}else if(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)){
alert("Chrome");
return ;
}else if(/opera/i.test(browserName)){
alert("Opera");
return ;
}else if(/webkit/i.test(browserName) &&!(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))){
alert("Safari");
return ;
}else{
alert("unKnow");
}
}
-------------------------------------------------------------添加到收藏夹:ieee,ie11,ff下可可弹窗添加--------------------------------------------------------------------
function favorite() {
var aUrls = document.URL.split("/");
var vDomainName = "http://" + aUrls[2] + "/";
var description = document.title;
var browserName=navigator.userAgent.toLowerCase();
if(!!window.ActiveXObject || "ActiveXObject" in window){
//alert("IE");
window.external.AddFavorite(vDomainName, description);
return ;
}else if(/firefox/i.test(browserName)){
//alert("Firefox");
//window.sidebar.addPanel(description,vDomainName, "");
var e = document.getElementById('fav');
e.setAttribute('href', vDomainName);
e.setAttribute('title', description);
e.setAttribute('rel', 'sidebar');
return;
}else if(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)){
//alert("Chrome");
alert("抱歉,您所使用的浏览器无法完成此操作。\n\n请使用Ctrl+D进行添加");
return ;
}else if(/opera/i.test(browserName)){
//alert("Opera");
var e = document.getElementById('fav');
e.setAttribute('href', vDomainName);
e.setAttribute('title', description);
e.setAttribute('rel', 'sidebar');
return ;
}else if(/webkit/i.test(browserName) &&!(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))){
//alert("Safari");
alert("抱歉,您所使用的浏览器无法完成此操作。\n\n请使用Ctrl+D进行添加");
return ;
}else{
//alert("unKnow");
alert("抱歉,您所使用的浏览器无法完成此操作。\n\n请使用Ctrl+D进行添加");
}
}
<a href="javascript:;" οnclick="whsmwy.favorite()" id="fav">收藏</a>