检查javascript中是否支持URL方案
有没有办法检查手机上当前是否注册了URL方案。。。使用javascript?不,不是来自网页。不是无缝的。 但有一种方法类似于检查弹出窗口是否被阻止 当您尝试一个不受支持的URL方案时,Safari将警告用户它不知道如何处理它,并停留在同一页面上 因此,如果你给你的应用程序打电话一段时间来激活,比如说300毫秒,然后做些别的事情来回应这个不存在的计划 它不是最漂亮的,但很管用:检查javascript中是否支持URL方案,javascript,iphone,safari,url-scheme,Javascript,Iphone,Safari,Url Scheme,有没有办法检查手机上当前是否注册了URL方案。。。使用javascript?不,不是来自网页。不是无缝的。 但有一种方法类似于检查弹出窗口是否被阻止 当您尝试一个不受支持的URL方案时,Safari将警告用户它不知道如何处理它,并停留在同一页面上 因此,如果你给你的应用程序打电话一段时间来激活,比如说300毫秒,然后做些别的事情来回应这个不存在的计划 它不是最漂亮的,但很管用: function startIThrown(){ document.location = 'ithrown://r
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);
}
<a href="#" onclick="startIThrown()">Restart iThrown</a>
函数startIThrown(){
document.location=ithrown://restart';
setTimeout(函数(){
如果(确认('您似乎没有安装iThrown,是否立即下载?')){
document.location=http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
}
}, 300);
}
这里有一个解决方案,当您从应用程序返回时,它不会显示弹出窗口,它假设您离开的时间超过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);
}
函数startiThrown(){
document.location=appurl;
var time=(新日期()).getTime();
setTimeout(函数(){
var now=(new Date()).getTime();
if((now-time)这是前两个解决方案的一个变体。它将创建一个可以在Google Chrome中打开的链接。如果失败,它将使用http打开链接
<script>
function checkChrome(h){
document.location=h;
var time = (new Date()).getTime();
setTimeout(function(){
var now = (new Date()).getTime();
if((now-time)<400) {
if(confirm('Missing Chrome. Download it now?')){
document.location = 'http://itunes.apple.com/us/app/chrome/id535886823?mt=8';
} else {
document.location=h.replace('googlechrome','http');
}
}
}, 300);
}
</script>
<a href="googlechrome://www.google.com" onclick="checkChrome(this.href);return false;">Open Google with Chrome</a>
功能检查铬(h){
文件位置=h;
var time=(新日期()).getTime();
setTimeout(函数(){
var now=(new Date()).getTime();
如果((现在时间)另一个很好的解决方法(至少在最新的浏览器版本中工作)是检查浏览器窗口在短时间超时后是否有焦点,那么只有当URI方案不起作用时,您才能向用户显示对话框
HTML:
我发现pagehide
事件比依赖系统时间更健壮
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);
}
从iOS 6.0开始,苹果发布了智能应用横幅,这些横幅符合我们大多数人的需求:
- 如果应用未安装,则发送到应用商店
- 使用App参数param打开具有特定深度链接的应用程序
包括以下元标记:
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
摘自这里:
我有一个jQuery插件,用于将替代应用程序链接添加到常规链接。我尝试只使用“pagehide”事件,但它不适用于Firefox。我在这里创建的这个版本适用于Firefox、Google Chrome和Safari。我还没有在Internet Explorer中进行测试
要让它在Firefox中运行,有一件事是必须的,那就是使用Iframe来设置src。这允许我在不离开页面的情况下调用应用程序
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
>
Example 1
</a>
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
data-url-app-found="http://www.google.com?q=found-link"
>
Example 2
</a>
<a class="uri-link" href="#"
data-uri-app="notexists://"
data-url-app-not-found="http://www.google.com?q=not-exists"
>
Example 3
</a>
<iframe id="callapp" style="display:none"></iframe>
这是基于mrahman的回答。如前所述,JoshNaro的new Date()在超时内调用时会返回错误的日期。测试表明,在停用应用程序之前启动的线程中没有更新日期
激活后调用的另一个setTimeout将使用当前日期创建一个新线程
这是在iOS 8上测试的
function startiThrown() {
document.location = appurl;
var time = (new Date()).getTime();
setTimeout(function(){
setTimeout(function(){ // <-- start new thread after activation
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';
}
}
}, 10); // <-- start new thread after activation
}, 300);
}
函数startiThrown(){
document.location=appurl;
var time=(新日期()).getTime();
setTimeout(函数(){
setTimeout(函数(){//我想我想起了一种应用程序可以检查这一点的方法,但我可能错了。谢谢你的快速回答。就本机代码而言,可以通过openUrl进行检查,所以我读过……不是tested@BrentRoyal Gordon:没有。本地iPhone应用程序可以通过调用canOpenURL进行检查:。网页上有一种方法:这就是其中之一“事实上是正确的,但实际上没有那么有用"回答。解决了OP可能首先应该问的问题!值得一试,但实际上这是一个令人讨厌的解决方案。即使URL方案在您返回页面时通过,该函数也会被调用。因此,用户无论遇到什么情况都会收到一个警报弹出窗口。1或2,取决于他的设备是否支持方案。@samvermette有一个半复杂的解决方法。如果url方案有效,那么让你的应用程序向你的服务器发送确认。然后当你返回应用程序时,让它ping服务器以查看应用程序是否成功打开。复杂但可行。如果应用程序被打开,有没有办法不显示这种可怕的不友好错误未安装?iOS 13.3解决方案很好地解决了“可怕的不友好错误”:我发现这里发布的解决方案工作得更好:当你没有安装应用程序时,插件无法解决警报问题我们遇到了一个问题,“现在”此解决方案中的变量完全错误。我们可以在应用程序中等待几分钟,然后返回浏览器并获得确认。似乎休眠唤醒过程有问题。概念不错。尽管找到的应用程序从未出现过。即使安装了应用程序(我试过instagram://app)它会触发notfound(未找到)。您是否尝试使超时更大?将第95行中的值从1000更改为9000(只是为了好玩)然后告诉我发生了什么。该代码不起作用。当模式存在且与可执行文件关联时,浏览器会询问是否要运行该应用程序。该延迟会导致超时,显然,confirm
函数将被执行。该代码不起作用。当模式存在且与可执行文件关联时,浏览器会询问是否要运行该应用程序。这种延迟会导致超时,显然,确认
功能会被执行。
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
>
Example 1
</a>
<a class="uri-link" href="#"
data-uri-app="myapp://"
data-url-app-not-found="http://www.google.com?q=not-found-link"
data-url-app-found="http://www.google.com?q=found-link"
>
Example 2
</a>
<a class="uri-link" href="#"
data-uri-app="notexists://"
data-url-app-not-found="http://www.google.com?q=not-exists"
>
Example 3
</a>
<iframe id="callapp" style="display:none"></iframe>
function startiThrown() {
document.location = appurl;
var time = (new Date()).getTime();
setTimeout(function(){
setTimeout(function(){ // <-- start new thread after activation
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';
}
}
}, 10); // <-- start new thread after activation
}, 300);
}