由于360浏览器去掉了UA信息,所以使用UA信息是无法判断用户是否使用的是360安全浏览器,可以建个demo页面,代码如下,在360安全浏览器下跑下:
1 | alert(navigator.userAgent.toLowerCase()); |
在明河的机子上打印消息如下:
1 | mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e; infopath.3) |
从UA信息中,我们找到了 msie 9.0,但不存在se360!
感慨下360浏览器就是个流氓!网上的抓“流氓”的方法过于“文明”,“流氓”已经免疫,制服“流氓”就要采用些非常手段。
非常感谢特木同学提供了该方法的实现思路,再感慨下,真乃鬼才!此方法过于龌蹉,慎用!
res://360se.exe/2/2025
这张图片,只有在se360下才能正常读取出来,所以可以通过js加载这张图片,然后通过判断图片大小,予以确认是否是se360。
KISSY版解决代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * 360浏览器隐藏了ua信息,无法判断是否是360浏览,这是临时方案 */ function se360Ua(){ //360浏览器混杂在IE中 if (KISSY.UA.shell != 'ie' ) return false ; var img = new Image(); img.onload= function (){ if (img.fileSize > 0) KISSY.UA.shell = 'se360' ; }; } se360Ua(); KISSY.later( function (){ alert(KISSY.UA.shell); },1000) |
覆写KISSY.UA.shell
,留意:图片加载需要一些时间,所以获取时候要加适当延迟。
原生js版解决代码:
1 2 3 4 5 6 7 8 9 10 11 12 | function isSe360(){ var ua = navigator.userAgent.toLowerCase(); //全局变量 IS_360 = false ; if (!ua.match(/msie ([\d.]+)/)) return IS_360; var img = new Image(); img.onload= function (){ if (img.fileSize > 0) IS_360 = true ; }; } isSe360(); |
此方法,风险很大,因为res://360se.exe/2/2025图片很可能会失效,或者因为使用该方法的人太多,导致图片无法访问,就会出现判断失效的情况,所以慎用!!!
再次吐槽:蛋疼的国产浏览器。
联系客服