zoukankan      html  css  js  c++  java
  • js判断是否是IE浏览器的几种方法

    <script> 
    if(!+[1,])alert("这是ie浏览器"); 
       else alert("这不是ie浏览器"); 
    </script>

    此方法是传说中的最简单的判断方法噢!

    但是要注意的是:此判断方法在ie11下,不支持!

    如:

    <script type="text/javascript">
      alert(+[1,]);
    </script>

    结果:输出1 → 是非ie
            输出NaN →是ie (而ie11果然不支持这个NaN判断)

    其实有很多判断的方法,大都是根据浏览器的特性来的。

    比如库prototype的方法是:!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1) 。就是根据ie支持window.attachEvent添加侦听事件,非ie用window.addEventListener添加侦听事件来判断的。navigator.userAgent.indexOf('Opera') === -1是因为opara浏览器能伪装成ie.如果!!(window.attachEvent )为真,就是ie;反之,如果!window.addEventListener为真,也可以判断为ie.

    Ext使用的是!"1"[0],他利用IE无法使用数组下标访问字符串的特性来判断。在ie8下好像有问题。

    在!+[1,]还未被发现前,判断ie最短的表达式是 !+"v1".它利用的是ie不支持垂直制表符的特性。

    以前还有一个常用方法是document.all,由于opera浏览器能伪装成ie。可以这样写:!!(document.all && navigator.userAgent.indexOf('Opera') === -1).

    还有很多,先记这几条,便于工作时查阅。

    1.+[1,]

    2.!+"v1"

    3.!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1)

    4.!!(!window.addEventListener&& navigator.userAgent.indexOf('Opera') === -1)

    5.!!(document.all && navigator.userAgent.indexOf('Opera') === -1)

    6.[if IE]  [endif] 实例:<!--[if IE]><script scr="excanvas.js"> </script><![end if]-->

    全世界最短IE判定if(!+[1,])的解释:

    <script type="text/javascript">

      alert([1,2]);//相当于alert([1,2].toString()); --这在IE与非IE上都相同,都会弹出"1,2"
      alert([1,]);//相当于alert([1,].toString());--在非IE的标准浏览器上,js引擎会自动删除最后的",",所以在IE上会弹出"1,",而在非IE上会弹出"1"
      alert(+[1,]);//根据上面的解释,这一句在IE上相当于alert(+"1,"),而在非IE上相当于alert(+"1"),正号的作用在于试图将字符串转换为数字,"1,"当然不是数字,而"1"可以转换为数字1,所以最终的结果:IE上会转换失败弹出"NaN",而非IE浏览器上会弹出数字"1"
     
    //上面的+号转换字符串为数字的测试
    var s = +"5";
    alert(s+1);
     
    //ok,到这里为止,我们知道 +[1,] 最终在IE为上NaN,在非IE浏览器上则为数字1
     
    //下面再来看看很有个性的NaN
    alert(NaN==true);//弹出 false
    alert(NaN==false);//弹出 false
    alert(NaN==NaN);//弹出 false
     
    //即NaN不管与谁比较都是false
    alert(!NaN);//相当于alert(!(NaN==true)),根据上面的解释当然是弹出true
     
     
    //所以,alert(!+[1,]) 最终在IE上会弹出"true",下面再来看看firefox等非IE浏览器上的表现
    alert(new Boolean(0));//false
    alert(new Boolean(1));//true
    alert(new Boolean(-1));//true
    //即:数字0会转换为false,其它任何数字都会转换为true,所以最终在非IE浏览器上最终等效于:
    alert(!1);
    //即
    alert(!true)//最终会得到false
     
      //综上所述:下面的这个判断就能判定浏览器是不是IE
      if (!+[1,]){
          alert("我是货真价实的IE浏览器!")
      }
      else{
          alert("我不是IE!")
      }
    </script>
  • 相关阅读:
    Ubuntu18.04下使用pip3.8报错subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-ze
    解决报错:ModuleNotFoundError: No module named ‘_sqlite3‘
    shell命令中find的用法
    Ubuntu 中卸载软件
    git使用
    django celery 使用
    Django 学习中遇到的问题
    1
    Mac 下安装brew(文末方法亲测有效)
    经典类与新式类的继承顺序
  • 原文地址:https://www.cnblogs.com/hanyingme/p/3447891.html
Copyright © 2011-2022 走看看