admin管理员组文章数量:1531793
浏览器调起app应用似乎很奇葩,但总归是有办法解决的。利用的是在浏览器地址栏中输入一个协议,如果有本地程序(应用)能够解析这个协议,那么这个应用将被调起。
说明一下期间存在的问题:
1、在浏览器地址栏中输入的协议如果不能被解析,那么浏览器会给出提示信息,为避免提示信息,可以再页面中嵌入iframe,然后以这个iframe为窗口打开url。或是open一个window打开url,但这种方式,由于无法收到url是否被打开的消息,因而需要做延时回调监控才能关闭这个新打开的窗口,逻辑复杂,不提倡。另外,通过script或img或link src的方式加载url方式无效
2、对是否安装app应用的逻辑分支做说明:
如果安装过app调起app,否则页面跳转到app下载页面,这个逻辑分支实现原理如下:
当在浏览器地址栏输入app定义的协议调起app时,如果已经安装过,系统中断浏览器进程,继而响应app进程,因而在切换到app的时候浏览器中js代码将不再执行,当再次切换回来时系统进程又切回浏览器,js代码从中断处继续执行。所做的逻辑分支就是利用这个关键点。可设置延时来做分支,当app可以被调起时,切换到app,js不再执行,这期中有个app调起时间(与系统有关),如果设置的延时时间过短,则js会继续执行。当切换回来,记录切换回来的时间点,与切换之前比较大于设定时间说明已经切换成功,将不再执行下载,否则下载。
3、app的协议是与app开发同学约定,由app开发同学通过activity scheme设置的
代码如下:
var appInfo = {
iosUrl: "", //打开IOS客户端链接
androidUrl: "", //打开ANdroid客户端的链接
downloadUrl: "" //下载客户端或者去App Store的链接
};
var t1 = new Date().getTime();
iframe2open();
jump2download();
//利用iframe打开客户端
function iframe2open(){
var src = $.os.ios ? appInfo.iosUrl : appInfo.androidUrl,
iframe = document.createElement("iframe");
iframe.src = src;
iframe.style.display = "none";
document.body.appendChild(iframe);
}
//跳转下载页面
function jump2download(){
var _timer = null;
clearTimeout(_timer);
_timer = setTimeout(function(){
var t2 = new Date().getTime();
if (t2 - t1 <= 800) {
window.location = appInfo.downloadUrl;
}
},400);
}
版权声明:本文标题:浏览器调起app应用方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725439448a1023382.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论