使用iframe從網頁調起移動端應用


比如想在網頁中調起支付寶,我們可以創建一個iframe,src為:

alipayqr://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode={支付二維碼掃描的url}

瀏覽器接收到這個url請求發現未知協議,會交給系統處理,系統就能調起支付寶客戶端了。我們還能趁機檢查一下用戶是否安裝客戶端:給iframe設置一個3-5秒的css3的transition過渡動畫,然后監聽動畫完成事件,如果用戶安裝了客戶端,那么系統會調起,並將瀏覽器轉入后台運行,進入后台的瀏覽器一般不會再執行css動畫,這樣,我們就能通過判斷css動畫執行的時長是否超過預設來判斷用戶是否安裝某個客戶端了:

 

/**
 * 調起客戶端
 * @param url {String}
 * @param onSuccess {Function}
 * @param onFail {Function}
 */
module.exports = function(url, onSuccess, onFail){
    // 記錄起始時間
    var last = Date.now();

    // 創建一個iframe
    var ifr = document.createElement('IFRAME');
    ifr.src = url;
    // 飄出屏幕外
    ifr.style.position = 'absolute';
    ifr.style.left = '-1000px';
    ifr.style.top = '-1000px';
    ifr.style.width = '1px';
    ifr.style.height = '1px';
    // 設置一個4秒的動畫用於檢查客戶端是否被調起
    ifr.style.webkitTransition = 'all 4s';
    document.body.appendChild(ifr);
    setTimeout(function(){
        // 監聽動畫完成時間
        ifr.addEventListener('webkitTransitionEnd', function(){
            document.body.removeChild(ifr);
            if(Date.now() - last < 6000){
                // 如果動畫執行時間在預設范圍內,就認為沒有調起客戶端
                if(typeof onFail === 'function'){
                    onFail();
                }
            } else if(typeof onSuccess === 'function') {
                // 動畫執行超過預設范圍,認為調起成功
                onSuccess();
            }
        }, false);
        // 啟動動畫
        ifr.style.left = '-10px';
    }, 0);
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM