1. 程式人生 > >js判斷本地是否安裝app

js判斷本地是否安裝app

var ua = navigator.userAgent.toLowerCase();
 
1.判斷是否是微信
 
function isWeixinBrowser() {
        return (/micromessenger/.test(ua)) ? true : false;
    }
 
 
2.判斷是否是android
 
var isAndroid = ua.indexOf('android') > -1 || ua.indexOf('linux') > -1;
 
3.具體過程
 
scheme是客戶端定義的url-scheme
 
$("a[href^='scheme://']").on('click',function(e){
        e.preventDefault();//阻止預設行為
        if(isWeixinBrowser()){
            $('.layer').show();//遮罩層(使用外部瀏覽器開啟,此處樣式自行設定)
        }else{
            if(isAndroid){
                //android
                $('body').append("
<iframe src="" style='display:none' target='' ></iframe>");//target為空防止在當前頁面重新整理 setTimeout(function(){window.location = 'http://www.510wifi.com/weixin_download_client.html'},600); }else{ //ios window.location = 'scheme://openapp'; setTimeout(function(){window.location = 'itms-apps://itunes.apple.com/app/id123456789'},25); } } }) 附:判斷手機端各種瀏覽器 if (ua.match(/WeiBo/i) == "weibo") { //在新浪微部落格戶端開啟 } if (ua.match(/QQ/i) == "qq") { //在QQ空間開啟 } if (browser.versions.ios) { //是否在IOS瀏覽器開啟 } if(browser.versions.android){ //是否在安卓瀏覽器開啟 } var u = navigator.userAgent, app = navigator.appVersion; trident: u.indexOf('Trident') > -1, //IE核心 presto: u.indexOf('Presto') > -1, //opera核心 webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌核心 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐核心 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否為移動終端 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android終端或uc瀏覽器 iPhone: u.indexOf('iPhone') > -1, //是否為iPhone或者QQHD瀏覽器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') == -1 //是否web應該程式,沒有頭部與底部
JS判斷手機端是否安裝了某個客戶端APP
 
雖然在Js中可以啟動某個app,但是並不能判斷該app是否安裝;
但是,但是....還是有奇思淫巧滴,啟動app需要的時間較長,js中斷時間長,如果沒安裝,js瞬間就執行完畢。直接上程式碼吧!
一、
 
function testApp(url) {
    var timeout, t = 1000, hasApp = true;
    setTimeout(function () {
        if (hasApp) {
            alert('安裝了app');
        } else {
            alert('未安裝app');
        }
        document.body.removeChild(ifr);
    }, 2000)
 
    var t1 = Date.now();
    var ifr = document.createElement("iframe");
    ifr.setAttribute('src', url);
    ifr.setAttribute('style', 'display:none');
    document.body.appendChild(ifr);
    timeout = setTimeout(function () {
         var t2 = Date.now();
         if (!t1 || t2 - t1 < t + 100) {
             hasApp = false;
         }
    }, t);
}
 
二、
 
    function isInstalled(){
        var the_href=$(".down_app").attr("href");//獲得下載連結
        window.location="apps custom url schemes";//開啟某手機上的某個app應用
        setTimeout(function(){
            window.location=the_href;//如果超時就跳轉到app下載頁
        },500);
    }
 
 
apps custom url schemes是什麼呢?
其實就是你與app約定的一個協議URL,在IOS客戶端或者Android客戶端中可以設定一個URL Scheme。例如,設定URL Scheme:app,然後其他的程式就可以通過“ URLString=app://”呼叫該應用。還可以傳引數,如:app://reaction/?uid=1
以上介紹了怎麼建立該本地協議及呼叫該本地協議的方法。但這裡還有個關鍵就是怎麼判斷使用者是否安裝了該app呢?原理如下:
在手機瀏覽器中用js程式碼請求該協議,如果在500ms內,如果有應用程式能解析這個協議,那麼就能開啟該應用;如果超過500ms就跳轉到app下載頁。

  原文連結:https://blog.csdn.net/libin_1/article/details/78335122