從網上搜到之前手機中判斷App是否安裝可以通過onblur事件+定時器來實現。
但現在要做這個功能時,按網上的說法已經不能實現了。因為現在瀏覽器中打開App,window不會觸發onblur事件。
在嘗試幾次后發現,雖然window.onblur沒有觸發,但定時器仍然會停止,所以使用這個特點就嘗試做了一個demo。
dome中包含2個頁面,一個主頁面,另一個用來打開App的頁面:
主頁面
<script type="text/javascript">
var log = function (msg) {
$('body').append('<div class="log">' + msg + '</div>');
};
var tmCheck;
function testApp(){
var $ifr = $('<iframe id="ifr"></iframe>')
$ifr.attr('src', 'checkapp.html');
$('body').append($ifr);
tmCheck = setTimeout(function(){
log('timeout, 未安裝');
}, 3000);
}
function checkApp(state){
if( state == true ){
clearTimeout(tmCheck);
return;
} else {
log('checkApp, 未安裝');
}
}
</script>
<button onclick="testApp();">Test</button>
checkApp.html
<script type="text/javascript">
function getSearchParam(key){
var result = window.location.search.match(new RegExp("(?:\\?|&)" + key + "=([^&]*)"));
return result ? result[1] : '';
}
var ticket = getSearchParam('_');
if( ticket != '' ){
if( Date.now() - ticket < 2500 ){
window.parent.checkApp(false);
}
} else {
setTimeout(function(){
var t = Date.now();
location.href = 'app打開協議://';
setTimeout(function(){
window.parent.checkApp(true);
location.href = 'checkapp.html?_=' + t;
}, 1500);
}, 100);
}
</script>
