js判断是否在微信或QQ中

之前用网上现成的代码发现有很多浏览器被判别成QQ,像这样:

function is_weixn_qq(){
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
return "weixin";
} else if (ua.match(/QQ/i) == "qq") {
return "QQ";
    }
return false;
}  

原因是一些手机浏览器navigator信息中会包含qqbrowser字符,因此被错判为QQ环境,通过分析不同环境下的navigator信息,微信和QQ环境下会包含如下的特征字符串:

MicroMessenger/xxx
qq/xxx
(xxx)疑似是版本号?

我们将原来代码中的正则表达式改为下面这样就行了:

if(ua.match(/MicroMessenger\/[0-9]/i)){
    return "weixin";
}

if(ua.match(/QQ\/[0-9]/i)){
    return "QQ";
}

扩展:为什么浏览器navigator中会出现其他浏览器的标识呢?
原因是以前不同的浏览器对特性的支持情况不同,因此在程序编写的时候开发人员会通过判断浏览器的类型,来决定网页要不要显示相关特性。而随着浏览器的发展,浏览器支持的特性越来越全,因此,为了告诉以前的网页“我是支持这些特性的”,浏览器开发者会在navigator字段添加其他浏览器的标签,从而避过页面开发人员的检测。有点像两边不断防御,不断破解的感觉,导致现在网上一些老的代码没法用,只能根据当前的实际情况自己编写代码。

猜你喜欢

转载自blog.csdn.net/u012075670/article/details/80821310