這種功能的作用:
1.一般公司有自己的app,而app是需要不斷有新用戶涌入才能持續運營,達到不錯的收入。就需要使用這種方式進行引入新的用戶。
2.一些內容在網頁端體驗不好,或者一些功能需要app內才能實現,就需要將用戶引入app中。打開app並自動跳到相應頁面。
首先,這個方法僅適用於移動端h5頁面,一般的智能機都是可以使用的。這里使用的是es5的代碼模式,容易理解。
知道了需求,我們看看如何實現:
1.首先要通過UA判斷當前瀏覽器UA 並轉大寫。用來分別針對安卓和ios機型做2種不一樣的處理。
var UA=navigator.userAgent.toUpperCase();
2.根據UA判斷的安卓還是ios機型,分別做處理。
安卓設備:
通過隱藏iframe方式實現。iframe中請求協議啟動地址,創建iframe需要時間,延遲一點時間,將iframe加入dom,產生請求。
如果app已安裝,瀏覽器就會彈出一個提示框,問用戶是否啟動app。
如果未安裝,瀏覽器等待一秒后就會去下載。
之所以使用iframe,為了防止location跳轉后,js請求中斷,跳入空白頁。
代碼中的Data.now()-t < 1200,只所以是1200,其實也是一個估計值,為了大部分解決一些已經安裝的app,1秒后還是會跳轉下載。因為打開app的瞬間,瀏覽器可能會卡一下js的執行導致延遲時間變長。超出1200ms就可以不用去下載了。
//如果是安卓瀏覽器(自帶瀏覽器、UA瀏覽器、QQ瀏覽器等) if(UA.indexOf("ANDROID")!=-1){ //創建iframe var ifr=document.createElement("iframe"); //iframe設置為app的協議打開方式地址 ifr.src="cmread://cmread.com/client?url=wap.cmread.com/rbc/402310056/index.htm";//安卓協議啟動地址 ifr.style.display="none";//隱藏 var t=Date.now();//取當前時間戳 //延遲執行iframe 實現訪問app協議打開app setTimeout(function(){ document.body.appendChild(ifr); },96); //延遲執行 如果1s沒響應,就表示你手機中沒有該app。就可以去下載了 setTimeout(function(){ if(Date.now() - t < 1200){ document.body.appendChild(ifr); location.href="http://wap.cmread.com/r/p/pg/212/CMREADBC_Android/CMREADBC_Android.apk";//安卓下載地址 } },1001); }
IOS設備:
首先,ios瀏覽器已經不支持再使用iframe了,所以上面的方式不適合用在ios上。
因此,這里只能采用location的方式。
如果安裝了app,ios瀏覽器打開app協議前就會彈出個框,提示是否打開。
如果沒有安裝,就不會彈出這個提示。
//如果是ios瀏覽器(safari、UA瀏覽器、QQ瀏覽器等) else if(UA.indexOf("IOS")!=-1 || UA.indexOf("IPHONE")!=-1){ var t=Date.now();//取當前時間戳 //延遲直接跳轉喚起app協議地址 setTimeout(function(){ location.href='cmread://cmread.com/clientjson={"activity":{"url":"http://wap.cmread.com/rbc/402310056/index.htm"}}&contentId=1004';//ios協議啟動地址 },96); //延遲執行 如果1s沒響應,就表示你手機中沒有該app。就可以去下載了 setTimeout(function(){ if(Date.now() - t < 1200){ location.href="https://itunes.apple.com/cn/app/he-yue-du/id863837323?mt=8&uo=4&at=10lM6r";//ios下載地址 } },1001); }