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

这篇博客讨论了在开发过程中遇到的IE浏览器兼容性问题,特别是IE11不再支持document.all的情况。作者分享了如何修改代码来正确判断IE浏览器,包括IE11及更低版本,并提供了检测IE浏览器版本的函数。博客还提醒开发者应遵循标准JS函数和API,以确保更好的浏览器兼容性。
摘要由CSDN通过智能技术生成

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

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

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

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

1

2

3

4

5

6

function isIE(){

if (window.navigator.userAgent.indexOf("MSIE")>=1)

return true;

else

return false;

}

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

1

2

3

4

5

6

function isIE() { //ie?

 if (!!window.ActiveXObject || "ActiveXObject" in window)

  return true;

  else

  return false;

 }

判断IE浏览器的具体版本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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与谷歌(现在不能用了曾经可以用)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

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内核的浏览器存在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。这才是解决兼容性问题的根本。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值