上周接到個需求,需求是這樣的:使用者掃一掃二維碼會產生一個連結,該連結會向後端發送個請求,返回一個 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;
}
}
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>
說明:可以將上面的 demo 放到伺服器上,然後產生個二維碼掃一掃。