JavaScript获取浏览器信息

上一篇 / 下一篇  2016-08-12 11:09:05 / 个人分类:安全测试


要想写出跨浏览器的javascript,就必须懂得嗅探技术。这是浏览器大战遗留下的大地雷,事已如此,只好认命,乖乖写分支结构吧,函数就是这样不知不觉中变长的。


先看单一浏览器的判断,我们没有必须去找navigator.userAgent的麻烦,我在国外的博客网站收集了如下hack,短小精悍:


<br>

ie = !+"/v1" ;<br>

ie ='/v'=='v' ;<br>

ie = 0//@cc_on+1;<br>

ie = !!top.execScript;<br>

ie = /*@cc_on!@*/!1;<br>

ie8 = !!window.XDomainRequest;<br>

<br>

//我自创的,如果是IE,会返回6,7,8代表ie6,ie7,ie8,否则返回1<br>

IEVersion = (" " + (/*@cc_on @_jscript_version  @*/-1)).slice(-1)<br>

<br>

//基于条件编译的嗅探脚本,还有如下几个:<br>

IE8=@cc_on @_jscript_version == 5.8 ? true : @false<br>

IE7=@cc_on @_jscript_version == 5.7 ? true : @false<br>

IE6=@cc_on @_jscript_version == 5.6 ? true : @false<br>

IE55=@cc_on @_jscript_version == 5.5 ? true : @false<br>

<br>

<br>

ff = /a/[-1]=='a';<br>

ff3 = (function  x(){})[-5]=='x';<br>

ff2 = (function x(){})[-6]=='x';<br>

<br>

safari=/a/.__proto__=='//';<br>

safari = window.openDatabase;<br>

<br>

chrome=/source/.test((/a/.toString+''));<br>

<br>

opera=!!window.opera ;<br>

opera=/^function (/.test([].sort);<br>

还有判断maxthon的:


<br>

//出处:http://www.cnblogs.com/xiarugu/archive/2009/02/02/1382293.html<br>

function IsMaxthon()<br>

{<br>

    try{<br>

        window.external.max_invoke("GetHotKey");<br>

        return true;<br>

    }catch(ex){<br>

        return false;<br>

    }<br>

}<br>

alert(IsMaxthon());<br>

<br>

//出处:http://bbs.maxthon.cn/archiver/?tid-148353.html<br>

try{<br>

        if(external.max_version.indexOf("1.")==0){<br>

                var isMaxthon1 = 1;<br>

        }else{<br>

                var isMaxthon1 = 0;<br>

        }<br>

}catch(e){<br>

        var isMaxthon1 = 0;<br>

}<br>

如果是想搞比较复杂的UI或者类库,对于浏览器的判断就要更严格一些,不能像上面那样游兵散勇。


<br>

B=(function x(){})[-5]=='x'?'FF3':(function x(){})[-6]=='x'?'FF2':/a/[-1]=='a'?'FF':'/v'=='v'?'IE':/a/.__proto__=='//'?'Saf':/s/.test(/a/.toString)?'Chr':/^function /(/.test([].sort)?'Op':'Unknown'<br>

在Ext3的源码中能找出如下现整的嗅探脚本:


<br>

      ua = navigator.userAgent.toLowerCase(),<br>

       check = function(r){<br>

           return r.test(ua);<br>

       },<br>

       isOpera = check(/opera/),<br>

       isChrome = check(/chrome/),<br>

       isWebKit = check(/webkit/),<br>

       isSafari = !isChrome && check(/safari/),<br>

       isSafari2 = isSafari && check(/applewebkit//4/), // unique to Safari 2<br>

       isSafari3 = isSafari && check(/version//3/),<br>

       isSafari4 = isSafari && check(/version//4/),<br>

       isIE = !isOpera && check(/msie/),<br>

       isIE7 = isIE && check(/msie 7/),<br>

       isIE8 = isIE && check(/msie 8/),<br>

       isIE6 = isIE && !isIE7 && !isIE8,<br>

       isGecko = !isWebKit && check(/gecko/),<br>

       isGecko2 = isGecko && check(/rv:1/.8/),<br>

       isGecko3 = isGecko && check(/rv:1/.9/),<br>


TAG: 信息 浏览器

 

评分:0

我来说两句

Open Toolbar