app喚起的完美解決方案,及阻止瀏覽器的默認彈窗行為


https://stackoverflow.com/questions/10237031/how-to-open-a-native-ios-app-from-a-web-app
var frame = document.createElement('iframe'); frame.src = 'myapp://?params=...'; frame.style.display = 'none'; document.body.appendChild(frame); setTimeout(function() { document.body.removeChild(frame); }, 4);

以上這個方案在喚起app時,當喚起不成功的時候不會有瀏覽器的默認行為,如果用href跳轉的化就會有瀏覽器的彈窗提示的行為了



var preventDefault = function(e) {
e = e || window.event;
if(e.preventDefault) {
e.preventDefault();
}else{
e.returnValue = false;
}
}
preventDefault();

以上的方法試過了,可以禁止手機上瀏覽器的彈窗的行為

 

https://segmentfault.com/a/1190000011231042

下面的方法沒試過

Ios/Android h5 喚起本地APP

   

糾結兩天(瀏覽器中喚起本地APP),一直找不到解決方案,今天總算基本搞定。

ps:吐槽一下 魔窗那篇文章,為什么就不直接把js代碼開源開源,混淆后的代碼看得我好惱火

參考文章:魔窗解決方案京東解決方案

首先是判斷瀏覽器

// 判斷瀏覽器 var Navigator = navigator.userAgent; var ifChrome = Navigator.match(/Chrome/i) != null && Navigator.match(/Version\/\d+\.\d+(\.\d+)?\sChrome\//i) == null ? true : false; var ifAndroid = (Navigator.match(/(Android);?[\s\/]+([\d.]+)?/)) ? true : false; var ifiPad = (Navigator.match(/(iPad).*OS\s([\d_]+)/)) ? true : false; var ifiPhone = (!ifiPad && Navigator.match(/(iPhone\sOS)\s([\d_]+)/)) ? true : false; var ifIos = Navigator.match(/iPhone|iPad|iPd/i) ? true : false; var ifSafari = ifIos && Navigator.match(/Safari/); // ios 設備的版本號 var iosVersion = Navigator.match(/OS\s*(\d+)/) iosVersion = iosVersion ? (iosVersion[1] || 0) : 0; // 安卓版本號 var androidVersion = Navigator.match(/Android\s*(\d+)/) androidVersion = androidVersion ? (androidVersion[1] || 0) : 0;

android5 及以上的高版本

// 延后50毫秒 setTimeout(function() { location.href = ‘自定義 URL’ }, 50)

ios9 及以上的版本

setTimeout(function() { // 必須要使用settimeout var a = document.createElement("a"); //創建a元素 a.setAttribute("href", ‘自定義 URL’), a.style.display = "none", document.body.appendChild(a); var t = document.createEvent("HTMLEvents"); // 返回新創建的 Event 對象,具有指定的類型。 t.initEvent("click", !1, !1) // 初始化新事件對象的屬性 a.dispatchEvent(t) // 綁定事件 }, 0)

所有情況都用 iframe

document.querySelector("#" + iframe).src = ‘自定義 URL’ // 將iframe增加src

計算時差的方案打開APP

var checkOpen = function (cb){ var _clickTime = +(new Date()); function check(elsTime) { if ( elsTime > 3000 || document.hidden || document.webkitHidden) { cb(1); } else { cb(0); } } //啟動間隔20ms運行的定時器,並檢測累計消耗時間是否超過3000ms,超過則結束 var _count = 0, intHandle; intHandle = setInterval(function(){ _count++; var elsTime = +(new Date()) - _clickTime; if (_count>=100 || elsTime > 3000 ) { clearInterval(intHandle); check(elsTime); } }, 20); } checkOpen(function(opened){ // APP沒有打開成功 並且開啟自動跳轉到下載頁 if(opened === 0 && option.autoRedirectToDownloadUrl){ location.href = downloadUrl; } });


免責聲明!

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



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