【javascript】js 判断微信浏览器

需求:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下载此 apk。但是,经过测试,发现用微信扫一扫打开的页面点击下载按钮下载不了 apk,后百度之,原来是微信内置浏览器屏蔽了下载链接,所以需要改为如果用户是用微信内置浏览器打开的,则提示用户换一个浏览器打开页面,否则下载不了 apk。那么该如何判断用户是否是用微信浏览器呢?

我们知道 js 可以通过 window.navigator.userAgent 来获取浏览器的相关信息,比如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36,那么我们也可以通过该方法来获取微信内置浏览器的相关信息:Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11d201 MicroMessenger/5.3。根据关键字 MicroMessenger(腾讯微信) 来判断是否是微信内置的浏览器。判断函数如下:

function isWeiXin(){
    var ua = window.navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
         return true;
     }else{
         return false;
     }
}

以上例子中:function isWeiXin()这是一个函数 。这个函数的返回值是布尔型的,返回的值 true/false 。准确的说,以上代码只是给出一个值,这个值用来判断是不是微信内置浏览器。
在此说明:不管是微信的内置浏览器,还是其它浏览器 。这些浏览器都是能执行 JS 以及解析你的 HTML 和 CSS 的 。 这里的判断微信只是一个特殊的要求,就是我只有在微信浏览器才显示js效果提示其它的不显示。 就比如一辆车   (就是 HTML+CSS+JS) , 每个人都有机会开(各种浏览器)。但是我出钱买了(微信浏览器),那就只有我能开了。 

JS 只是动作。显示不显示那是CSS 的事 ,概括的说也就是: html=结构  css=表现   js=行为

demo:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>判断是否是微信内置浏览器</title>
</head>
<body>
    <h1>如果用微信浏览器打开可以看到下面的文字</h1>
    <p></p>
</body>
</html>
<script type="text/javascript">window.onload = function(){
    if(isWeiXin()){
        var p = document.getElementsByTagName('p');
        p[0].innerHTML = window.navigator.userAgent;
    }
}
function isWeiXin(){
    var ua = window.navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
        return true;
    }else{
        return false;
    }
}
</script>


onload(页面加载,加载事件)
MicroMessenger(腾讯微信)

说明:可以将上面的 demo 放到服务器上,然后生成个二维码扫一扫。