JS如何判斷是否為ie瀏覽器的方法(包括IE10、IE11在內(nèi))
今天在寫一個(gè)代碼復(fù)制功能的時(shí)候,發(fā)現(xiàn)的這個(gè)問題,ie11也不支持document.all,看來以后越來越標(biāo)準(zhǔn)了
今天碰到一個(gè)奇怪的問題,有一個(gè)頁面,想指定用IE瀏覽器打開,在VS開發(fā)環(huán)境沒有問題,但部署到服務(wù)器上,即使是用IE打開頁面,還是提示“僅支持IE”,真是暈啊?。?br /> 判斷是否IE瀏覽器用的是window.navigator.userAgent,跟蹤這個(gè)信息,發(fā)現(xiàn)在開發(fā)環(huán)境,識(shí)別為IE10,但訪問服務(wù)器則識(shí)別為IE11,但I(xiàn)E11的userAgent里是沒有MSIE標(biāo)志的,原因就是這個(gè)了。
把判斷IE瀏覽器的方法改成如下就可以了。
原來的函數(shù)寫法:對(duì)于新版的ie11已經(jīng)不支持了
function isIE(){ if (window.navigator.userAgent.indexOf("MSIE")>=1) return true; else return false; }
ie10及以上不支持ie瀏覽器的判斷了,因?yàn)閕e11已經(jīng)不支持document.all了,下面是支持ie11的版本的,當(dāng)然ie6-8也是支持的
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) return true; else return false; }
判斷IE瀏覽器的具體版本
function IEVersion() { var userAgent = navigator.userAgent; //取得瀏覽器的userAgent字符串 var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判斷是否IE<11瀏覽器 var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判斷是否IE的Edge瀏覽器 var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1; if(isIE) { var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); reIE.test(userAgent); var fIEVersion = parseFloat(RegExp["$1"]); if(fIEVersion == 7) { return 7; } else if(fIEVersion == 8) { return 8; } else if(fIEVersion == 9) { return 9; } else if(fIEVersion == 10) { return 10; } else { return 6;//IE版本<=7 } } else if(isEdge) { return 'edge';//edge } else if(isIE11) { return 11; //IE11 }else{ return -1;//不是ie瀏覽器 } }
JS通過內(nèi)核判斷各種瀏覽器|區(qū)分360與谷歌(現(xiàn)在不能用了曾經(jīng)可以用)
function getBrowserInfo(){ var ua = navigator.userAgent.toLocaleLowerCase(); var browserType=null; if (ua.match(/msie/) != null || ua.match(/trident/) != null) { browserType = "IE"; browserVersion = ua.match(/msie ([\d.]+)/) != null ? ua.match(/msie ([\d.]+)/)[1] : ua.match(/rv:([\d.]+)/)[1]; } else if (ua.match(/firefox/) != null) { browserType = "火狐"; }else if (ua.match(/ubrowser/) != null) { browserType = "UC"; }else if (ua.match(/opera/) != null) { browserType = "歐朋"; } else if (ua.match(/bidubrowser/) != null) { browserType = "百度"; }else if (ua.match(/metasr/) != null) { browserType = "搜狗"; }else if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) { browserType = "QQ"; }else if (ua.match(/maxthon/) != null) { browserType = "遨游"; }else if (ua.match(/chrome/) != null) { var is360 = _mime("type", "application/vnd.chromium.remoting-viewer"); function _mime(option, value) { var mimeTypes = navigator.mimeTypes; for (var mt in mimeTypes) { if (mimeTypes[mt][option] == value) { return true; } } return false; } if(is360){ browserType = '360'; }else{ $('html').css("zoom",".80"); } }else if (ua.match(/safari/) != null) { browserType = "Safari"; } }
只有原生Chrome中存在一種MimeType“application/vnd.chromium.remoting-viewer”,由此可以判斷瀏覽器是加殼Chrome或是原生Chrome。
再如,只有IE內(nèi)核的瀏覽器存在ActiveXObject對(duì)象。由此可以判斷是否為IE瀏覽器
判斷瀏覽器類型,我們需要遵循以下原則:
1、采取命中特征原則,當(dāng)且僅當(dāng)完全符合區(qū)分瀏覽器的特征時(shí)我們才會(huì)采用此特征。例如單純通過UA中MSIE來檢測是否為IE瀏覽器是不可靠的。而通過判斷是否存在MimeType“application/vnd.chromium.remoting-viewer”來斷言原生Chrome在現(xiàn)階段來看是可行性,但也不保證永久有效。
2、對(duì)于主流瀏覽器來說一般不存在UserAgent關(guān)鍵字沖突,但對(duì)于許多加殼瀏覽器者就不一定了。再次提出某數(shù)字瀏覽器,userAgent干脆和IE一模一樣,但渲染模式等等不不知道動(dòng)了什么手腳,與標(biāo)準(zhǔn)IE行為差異很大。通過userAgent來判斷瀏覽器時(shí),優(yōu)先命中瀏覽器特征字。匹配則基本確定為該瀏覽器,但未匹配也并不代表不是此瀏覽器。請(qǐng)悉知。
3、優(yōu)先使用瀏覽器特性來區(qū)分瀏覽器,因?yàn)檫@個(gè)準(zhǔn)確性較高。其次再采用userAgent輔助判斷,從而達(dá)到最高的匹配度。
4、優(yōu)先檢測第三方加殼瀏覽器,目前并未有十分好的方案,只能枚舉大部分世面上存在并可以判斷的瀏覽器,其他未匹配任何規(guī)則的瀏覽器,為了兼容,請(qǐng)將規(guī)則落到四大瀏覽器之一。
5、判斷瀏覽器版本,僅僅是為了針對(duì)特定瀏覽器進(jìn)行優(yōu)化,需要有特定的業(yè)務(wù)場景需要才要這么做?;蛘弋?dāng)某個(gè)瀏覽器出現(xiàn)兼容問題時(shí),緊急添加針對(duì)瀏覽器的補(bǔ)丁代碼時(shí)才判斷。更加科學(xué)穩(wěn)妥的辦法是使用標(biāo)準(zhǔn)的JS函數(shù)和API,頁面元素和樣式設(shè)計(jì)遵循W3C標(biāo)準(zhǔn)。可能存在爭議的兼容性問題盡可能采用第三方框架如jQuery。這才是解決兼容性問題的根本。
相關(guān)文章
JavaScript 解決ajax中parsererror錯(cuò)誤案例詳解
這篇文章主要介紹了JavaScript 解決ajax中parsererror錯(cuò)誤案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用詳解
這篇文章主要介紹了javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用,結(jié)合實(shí)例形式分析了javascript組合模式基本概念、原理、應(yīng)用場景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04JS關(guān)鍵字變色實(shí)現(xiàn)思路及代碼
JS關(guān)鍵字變色詳細(xì)很多朋友都很想實(shí)現(xiàn)吧接下來將執(zhí)行以下幾個(gè)步驟:1.替換關(guān)鍵字,對(duì)字體變色2.用正則,CSS背景變色;該方法可結(jié)合前臺(tái)JS調(diào)用,感興趣的朋友可以參考下,希望可以幫助到你2013-02-02JS 動(dòng)態(tài)判斷PC和手機(jī)瀏覽器實(shí)現(xiàn)代碼
這篇文章主要介紹了JS 動(dòng)態(tài)判斷PC和手機(jī)瀏覽器實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09關(guān)于Iframe父頁面與子頁面之間的相互調(diào)用
下面小編就為大家?guī)硪黄P(guān)于Iframe父頁面與子頁面之間的相互調(diào)用。小編覺得挺不錯(cuò)的,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦2016-11-11JS實(shí)現(xiàn)鼠標(biāo)滑過折疊與展開菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)滑過折疊與展開菜單效果代碼,涉及JavaScript基于鼠標(biāo)事件動(dòng)態(tài)改變頁面元素樣式的相關(guān)實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09JavaScript實(shí)現(xiàn)shuffle數(shù)組洗牌操作示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)shuffle數(shù)組洗牌操作,結(jié)合實(shí)例形式分析了javascript數(shù)組的定義、構(gòu)造、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01