今天在写一个代码复制功能的时候,发现的这个问题,ie11也不支持document.all,看来以后越来越标准了

今天碰到一个奇怪的问题,有一个页面,想指定用IE浏览器打开,在VS开发环境没有问题,但部署到服务器上,即使是用IE打开页面,还是提示“仅支持IE”,真是晕啊!!
判断是否IE浏览器用的是window.navigator.userAgent,跟踪这个信息,发现在开发环境,识别为IE10,但访问服务器则识别为IE11,但IE11的userAgent里是没有MSIE标志的,原因就是这个了。

把判断IE浏览器的方法改成如下就可以了。

方法一(原文):

原来的函数写法:对于新版的ie11已经不支持了

function isIE(){if (window.navigator.userAgent.indexOf("MSIE")>=1) return true; elsereturn false;
}

ie10及以上不支持ie浏览器的判断了,因为ie11已经不支持document.all了,下面是支持ie11的版本的,当然ie6-8也是支持的

function isIE() { //ie?if (!!window.ActiveXObject || "ActiveXObject" in window)return true;elsereturn 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通过内核判断各种浏览器|区分360与谷歌(现在不能用了曾经可以用)

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";}
}

方法二(本人新增):

判断是否是IE 11及以下或者其他(其他里包括IE edge)
function isIE() {if(!!window.ActiveXObject || "ActiveXObject" in window){return true;}else{return false;}
}

判断浏览器类型,我们需要遵循以下原则:只有原生Chrome中存在一种MimeType“application/vnd.chromium.remoting-viewer”,由此可以判断浏览器是加壳Chrome或是原生Chrome。
再如,只有IE内核的浏览器存在ActiveXObject对象。由此可以判断是否为IE浏览器

1、采取命中特征原则,当且仅当完全符合区分浏览器的特征时我们才会采用此特征。例如单纯通过UA中MSIE来检测是否为IE浏览器是不可靠的。而通过判断是否存在MimeType“application/vnd.chromium.remoting-viewer”来断言原生Chrome在现阶段来看是可行性,但也不保证永久有效。
2、对于主流浏览器来说一般不存在UserAgent关键字冲突,但对于许多加壳浏览器者就不一定了。再次提出某数字浏览器,userAgent干脆和IE一模一样,但渲染模式等等不不知道动了什么手脚,与标准IE行为差异很大。通过userAgent来判断浏览器时,优先命中浏览器特征字。匹配则基本确定为该浏览器,但未匹配也并不代表不是此浏览器。请悉知。
3、优先使用浏览器特性来区分浏览器,因为这个准确性较高。其次再采用userAgent辅助判断,从而达到最高的匹配度。
4、优先检测第三方加壳浏览器,目前并未有十分好的方案,只能枚举大部分世面上存在并可以判断的浏览器,其他未匹配任何规则的浏览器,为了兼容,请将规则落到四大浏览器之一。
5、判断浏览器版本,仅仅是为了针对特定浏览器进行优化,需要有特定的业务场景需要才要这么做。或者当某个浏览器出现兼容问题时,紧急添加针对浏览器的补丁代码时才判断。更加科学稳妥的办法是使用标准的JS函数和API,页面元素和样式设计遵循W3C标准。可能存在争议的兼容性问题尽可能采用第三方框架如jQuery。这才是解决兼容性问题的根本。

JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)相关推荐

  1. 怎么在html页面和js里判断是否是IE浏览器

    HTML里: HTML代码中,在编写网页代码时,各种浏览器的兼容性是个必须考虑的问题,有些时候无法找到适合所有浏览器的写法,就只能写根据浏览器种类区别的代码,这时就要用到判断代码了.在HTML代码中, ...

  2. WeChat判断是否为微信浏览器访问方法:HTTP_USER_AGENT:MicroMessenger

    PHP判断 <?php /** * Power: 判断是否是微信浏览器访问*/ function is_weixin_visit() {if (strpos($_SERVER['HTTP_USE ...

  3. 判断 IE9及以下浏览器hack方法

    判断 IE9及以下浏览器: !!window.AnimationEvent

  4. js中判断数据类型的几种实用方法

    前言 最近项目中有不少地方需要判断数据类型,但是判断数据类型也有好几种方法,并且每种方法判断的数据类型也有局限性,所以想总结一下,方便以后查阅. 分别是 typeof ,instanceof,Obje ...

  5. 面试题31:JS中判断是数组的四种方法

    目录 第一种:Array.isArray 第二种:instanceof 第三种:通过constructor判断 instanceof和constructor的判定也存在一些弊端 第四种:通过Objec ...

  6. js怎么判断是否是数组的六种方法

    instanceof 主要用来判断某个实例是否属于某个对象所在的原型链上,因此并不能完全分辨出到底是否是数组 let a = [1, 2, 3];console.log(a instanceof Ar ...

  7. 判断是否为IE浏览器(方法一)

    javascript 判断是否为IE浏览器的方法? 测试OK. 实例demo: <html doctype!> <html><head><title>& ...

  8. 判断页面打开的浏览器信息

    通过JS如何判断是否在微信浏览器打开,是否在QQ空间浏览器,是否在新浪微博打开.if (browser.versions.mobile) {//判断是否是移动设备打开.browser代码在下面var ...

  9. js判断是否是ie浏览器且给出ie版本

    之前懒得写判断ie版本js,因为网上关于这方面的代码太多了,所以从网上拷贝了一个,放到项目上才发现由于时效性的问题,代码不生效.就自己写一个吧. 怎么去看浏览器的内核等信息 ---- js的全局对象w ...

最新文章

  1. VC实用小知识总结 (一),转http://blog.csdn.net/myiszjf/article/details/10007431
  2. vs2003复制一个web窗体,没有更改指向同一个cs 文件,引发大问题
  3. 0基础入门,如何快速上手Python?
  4. Apache配置虚拟主机三大问题--自己的相关坑
  5. HDU多校2 - 6763 Total Eclipse(贪心+并查集)
  6. 生成arff文件,csv转为arff
  7. 基于ruby环境搭建Redmine
  8. raspberry pi_探索Raspberry Pi Sense HAT
  9. struts2 struts.xml 配置(转载)
  10. RedHat Enterprise Linux 5下安装firefox
  11. ambari 搭建hadoop大数据平台系列4-配置ambari-server
  12. 拓端tecdat|R语言多臂试验 - 我们应该考虑多重性吗?
  13. 一个完整的爬虫入门程序
  14. java-php-net-python-4大型卖场仓储部进出仓库管理系统计算机毕业设计程序
  15. Elasticsearch创建索引
  16. python 球的表面积和体积_[给球的体积算表面积]C语言求球的表面积和体积
  17. Android兼容性测试的一些坑
  18. 电脑的任务栏只显示一条杠,没有图标怎么解决,看这里!!!
  19. layui当前表格第一行_layui数据表格新增一行
  20. Java网络通信实验小记四:Swing聊天软件

热门文章

  1. AIRIOT物联网低代码平台如何配置交通部JT-808协议?
  2. 洛谷P1458 [USACO2.1]顺序的分数 Ordered Fractions
  3. jmeter优化记录文档
  4. 完美解决:error: failed to push some refs to 'https://github.com/xxxx.git'
  5. Vue渲染Leaflet GIS地图,边界线,点位组件
  6. 凹凸技术揭秘 · Tide 研发平台 · 布局研发新基建
  7. img 图片加载设置超时
  8. Java多线程探究-死锁原因
  9. Verilog 实现伪随机数生成器(线性反馈移位寄存器)
  10. 【ARM Cache 入门及渐进五--内存屏障ISB/DSB/DMB】