玖叶教程网

前端编程开发入门

关于H5唤醒APP的功能实现(千辛万苦)

啥话不说,先上js代码


  1. //启动app方法
  2. function startApp(url, url2) {

//url是跳转的scheme地址,这个建议下个反编译的软件,去第三方apk查他们设置的scheme_url和scheme_host是什么,我就是这样干的


  1. //url2是应用下载地址,要分清ios和android的不一样
  2. //将下载地址保存到全局变量
  3. downloadUrl = url2;
  4. if(ua.match(/ipad|iphone|ipod|ios/i)) {
  5. //外部一个定时器,专门盯着启动app的定时器loop;就叫它killer吧
  6. //计时6秒,之后干掉loop.
  7. window.setTimeout(function() {
  8. $('#message').html('');
  9. $('.result-message').eq(0).css("display", "none");
  10. clearTimeout(loop);
  11. time = parseInt('6000') / 1000;
  12. }, 6000);
  13. //尝试启动应用
  14. location.href = url;
  15. //同时开始应用启动倒计时
  16. countDown();
  17. } else {
  18. //安卓的就是用iframe来测试是否安装和启动应用了
  19. window.setTimeout(function() {
  20. $('#message').html('');
  21. $('.result-message').eq(0).css("display", "none");
  22. clearTimeout(loop);
  23. time = parseInt('6000') / 1000;
  24. }, 6000);
  25. //创建iframe并启动应用入口
  26. openApp(url);
  27. }
  28. }
  29. function openApp(src) {
  30. // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP
  31. var ifr = document.createElement('iframe');
  32. ifr.src = src;
  33. ifr.style.display = 'none';
  34. document.body.appendChild(ifr);
  35. //切换到iframe时
  36. //此时,会有个问题,如后切换到应用时间小于killer所需要杀死loop的时间,loop就会跳到下载提示,killer`就失去作用了
  37. countDown();
  38. window.setTimeout(function() {
  39. document.body.removeChild(ifr);
  40. }, 5000);
  41. //倒计时
  42. }
  43. function countDown() {
  44. //每秒调用一次
  45. loop = window.setTimeout('countDown()', 1000);
  46. if(time > 0) {
  47. $('.result-message').eq(0).css("display", "block");
  48. $('#message').html('正在尝试打开客户端 ' + time + 's');
  49. time--;
  50. if(time == 0) {
  51. /*if(ua.match(/ipad|iphone|ipod|ios/i)){
  52. console.log(downloadUrl);
  53. location.href = downloadUrl;
  54. }*/
  55. //如果计时到0,loop任然没被干掉,就说明应用没有启动,此时,跳到下载提示界面
  56. //定时器的局限性还是很大,不能响应式反应,所以只能做到这一步了
  57. $('#message').html('');
  58. $('.result-message').eq(0).css("display", "none");
  59. clearTimeout(loop);
  60. time = parseInt('6000') / 1000;
  61. var btnArray = ['否', '是'];
  62. mui.confirm('您没有安装该应用,是否下载安装包?', '应用下载', btnArray, function(e) {
  63. if(e.index == 1) {
  64. location.replace(downloadUrl);
  65. } else {
  66. return;
  67. }
  68. });
  69. }
  70. }
  71. }

整理了一下,定时器还是不好用,这也是没办法的办法了,网上大多的教程都是定时器,不是定时器的我又不明白人家啥意思,而且大部分都是安卓的,ios就是个坑,safari不支持iframe的跳转,就搞的我人都凌乱了,只能自己想办法,这个之前那个两个定时器控制的调转差不多,将就着看吧

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言