應該很多人遇到過這種需求,掃描二維碼打開app若是用戶沒有這個app則提示它跳轉。javascript
用網頁直接來調用app是不打可能的,必須原生那邊先作一些配置。html
首先,安卓和蘋果的調用方法是不一樣的。java
因此咱們須要先判斷一下終端。android
var u = navigator.userAgent,
app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android終端或者uc瀏覽器
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端ios
以後最好是分別跳轉到兩個不一樣的頁面去作操做,由於蘋果須要在頭部配置一個app-id<meta name='apple-itunes-app' content='app-id=1115968341'>瀏覽器
下面是蘋果的代碼微信
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name='apple-itunes-app' content='app-id=1115968341'> <title></title> </head> <body> <a href="https://itunes.apple.com/cn/app/yi-fang-kuai-le-xue-tang/id1115968341?mt=8" id="openApp">點擊打開</a> <script type="text/javascript"> //蘋果 document.getElementById('openApp').onclick = function(e){ // 經過iframe的方式試圖打開APP,若是能正常打開,會直接切換到APP,並自動阻止a標籤的默認行爲 // 不然打開a標籤的href連接 var ifr = document.createElement('iframe'); ifr.src = 'iosefunbox://'; ifr.style.display = 'none'; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); },3000) }; </script> </body> </html>
這裏的ifr.src就是你去打開app的協議路徑,安卓和蘋果是不同的。
若是是安卓機的話就簡單了
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"> </head> <body> <a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile" id="openApp">點擊打開</a> <script type="text/javascript"> //安卓 // /**/window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile"; // 經過iframe的方式試圖打開APP,若是能正常打開,會直接切換到APP,並自動阻止a標籤的默認行爲 // 不然打開a標籤的href連接 var ifr = document.createElement('iframe'); ifr.src = 'efunbox://efunbox.app/efunbox/open'; ifr.style.display = 'none'; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); },3000); </script> </body> </html>
這是咱們原先的需求,後來變了,說蘋果直接跳轉到appstore裏面就行了,不用直接打開,安卓的話須要直接打開。app
這樣我就直接把它們集合在一個網頁就行。jsp
我上面的a連接是直接跳轉到騰訊應用寶裏面。scala
用網頁掃描訪問的話是沒問題的,
可是我就感受會出事,後來拿微信掃一掃就蒙逼了。安卓只會打開a連接,跳轉不進app,由於被微信攔截掉了,蘋果也同樣,解決的方案只能是點擊右上角,提示用戶在瀏覽器打開就沒問題。這種方法是無奈之舉,但後來針對蘋果機找到了一個解決它的方案就是,a連接的跳轉直接跳騰訊應用寶上架的連接,而後微信內部會處理幫你自動跳轉到appstore裏面。
最後是整合了一下的代碼。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body id="body"> <script type="text/javascript"> var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android終端或者uc瀏覽器 var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端 if(isIOS){ window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile"; } if(isAndroid){ alert("請點擊右上角在瀏覽器打開"); window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile"; var ifr = document.createElement('iframe'); ifr.src = 'efunbox://efunbox.app/efunbox/open'; ifr.style.display = 'none'; document.body.appendChild(ifr); window.setTimeout(function(){ document.body.removeChild(ifr); },3000); } </script> </body> </html>