js判断是否在微信或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)疑似是版本号?我们将原来代码中的正则表达式改为下面这样就行了:
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger\/[0-9]/i)){
return "weixin";
}
if(ua.match(/QQ\/[0-9]/i)){
return "QQ";
}扩展:为什么浏览器navigator中会出现其他浏览器的标识呢?
原因是以前不同的浏览器对特性的支持情况不同,因此在程序编写的时候开发人员会通过判断浏览器的类型,来决定网页要不要显示相关特性。而随着浏览器的发展,浏览器支持的特性越来越全,因此,为了告诉以前的网页“我是支持这些特性的”,浏览器开发者会在navigator字段添加其他浏览器的标签,从而避过页面开发人员的检测。有点像两边不断防御,不断破解的感觉,导致现在网上一些老的代码没法用,只能根据当前的实际情况自己编写代码。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!