有没有办法检查手机上当前是否注册了URL方案...使用javascript?
不是无缝的.但有一种方法类似于检查弹出窗口是否被阻止.
当您尝试不受支持的URL方案时,Safari会警告用户它不知道如何处理它并保持在同一页面上.
因此,如果您给应用程序调用了一些时间来激活,比如300毫秒,然后做一些其他事情来响应该方案的不存在.
这不是最漂亮但它有效:
function startIThrown(){ document.location = 'ithrown://restart'; setTimeout(function(){ if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){ document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6'; } }, 300); } Restart iThrown
这是一个解决方案,当你从应用程序回来时它没有显示弹出窗口,它假设你已经超过400毫秒:
function startiThrown() { document.location = appurl; var time = (new Date()).getTime(); setTimeout(function(){ var now = (new Date()).getTime(); if((now - time)<400) { if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){ document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6'; } } }, 300); }
我发现pagehide
事件比依赖系统时间更强大.对于我们这些喜欢非jQuery青睐的人来说,这是片段.
var appurl = 'custom://url'; var appstore = 'https://itunes.apple.com/us/app/your-app'; var timeout; function preventPopup() { clearTimeout(timeout); timeout = null; window.removeEventListener('pagehide', preventPopup); } function startApp() { window.location = appurl; timeout = setTimeout(function(){ if(confirm('You do not seem to have the App installed, do you want to go download it now?')){ document.location = appstore; } }, 1000); window.addEventListener('pagehide', preventPopup); }
另一个伟大的(至少在最新的浏览器版本中工作)解决方法是在短暂超时后检查浏览器窗口是否具有焦点,这样只有在URI方案不起作用时才能向用户显示对话框
HTML:
URI?
Javascript(在这里使用jQuery):
var windowHasFocus; $(window).focus(function() { windowHasFocus = true; }).blur(function() { windowHasFocus = false; }); function goToUri(uri) { window.location = uri; setTimeout(function(){ if (windowHasFocus) { if (confirm('You do not seem to have Qobuz installed, do you want to go download it now?')){ window.location = 'http://www.qobuz.com'; } } }, 100); } $('a').on('click', function(){ goToUri($(this).data('uri')); });?
这是一个有效的jsFiddle,只需用你自己的URI方案更新它:http: //jsfiddle.net/mF6TZ/
从iOS 6.0开始Apple推出了智能应用程序横幅,它们可以满足我们大多数人的需求:
如果未安装该应用程序,请发送至App Store.
使用app-argument参数打开具有特定深层链接的应用程序.
包含以下元标记:
取自此处: Safari Web内容指南