Cor*_*art 28 javascript safari mobile-safari deep-linking ios
我正在寻找一个关于移动safari的事件,它将检测页面因重定向而被隐藏的时间.我想直接打开我的应用程序,如果用户安装了它,然后尝试facebook,如果它已安装,如果没有,然后转到该网页获取该ID.
我用以下HTML/JS 创建了一个测试链接:
<!DOCTYPE html>
<html>
<head>
<title>Redirect Test</title>
<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>
<meta name='viewport' content='initial-scale = 1.0,maximum-scale = 1.0' />
</head>
<body>
<button>Open Oreo</button>
<script type='text/javascript'>
jQuery(function(){
jQuery( 'button' ).on( 'click', function(){
var myid = null, fbid = null;
// Watch for page leave to kill timers
jQuery( window ).on( 'pagehide pageshow blur unload', function(){
if ( myid ) {
clearTimeout( myid );
}
if ( fbid ) {
clearTimeout( fbid );
}
});
window.location = "myapp://fbprofile/oreo";
var myid = setTimeout(function(){
// My app doesn't exist on device, open facebook
window.location = "fb://profile/oreo";
fbid = setTimeout(function(){
// Facebook doesn't exist on device, open facebook mobile
window.location = "https://www.facebook.com/oreo";
}, 100);
}, 100);
});
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
god*_*ing 20
好的代码.
编辑:(删除有关添加的建议return false;
)
尝试在setTimeout
功能中设置检查,而不是仅仅清除超时.(我发现清除对于间隔更有效,而不是简单的1次setTimeout调用).另外,在尝试像我这样的原生应用程序协议之前,我会检查以确保用户不在桌面浏览器上,app://
或者fb://
这些浏览器会尝试跟踪该位置并最终显示错误.
尝试:
<!DOCTYPE html>
<html>
<head>
<title>Redirect Test</title>
<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>
<meta name='viewport' content='initial-scale = 1.0,maximum-scale = 1.0' />
</head>
<body>
<button>Open Oreo</button>
<script type='text/javascript'>
var mobileExp = /android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile|o2|opera mini|palm( os)?|plucker|pocket|pre\/|psp|smartphone|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce; (iemobile|ppc)|xiino/i;
jQuery(function(){
jQuery( 'button' ).on( 'click', function(){
// Don't give desktop browsers a chance to fail on a nativeapp:// protocol
if(!mobileExp.test(navigator.userAgent)) {
window.location = "https://www.facebook.com/oreo";
return;
}
var clicked = +new Date, timeout = 100;
window.location = "myapp://fbprofile/oreo";
setTimeout(function(){
// If we're still here after a (timeout), try native facebook app
if (+new Date - clicked < timeout*2){
console.log('clicked '+ (+new Date - clicked) +' ago- go to FB');
window.location = "fb://profile/oreo";
} else {
console.log('too late for facebook');
}
setTimeout(function(){
// If we're still here after another (timeout), try facebook web app
if (+new Date - clicked < timeout*2){
console.log('clicked '+ (+new Date - clicked) +' ago- go to browser');
window.location = "https://www.facebook.com/oreo";
} else {
console.log('too late for browser');
}
}, timeout);
}, timeout);
});
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当然,取消注释控制台日志并做一些实验的价值timeout
.这个确切的代码在IOS 6.1 Safari和Safari 6.0.2 Mac中成功测试.希望能帮助到你!
归档时间: |
|
查看次数: |
5289 次 |
最近记录: |