URL schemes, 通过超链接打开App应用

  1. var mobileAppInstall = (function () {
  2. var ua = navigator.userAgent,
  3. loadIframe,
  4. win = window,
  5. isIPad = ua.match(/iPad/i) != null,
  6. isIphone = !isIPad && ((ua.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null)),
  7. isIOS = isIPad || isIphone,
  8. isAndroid = !isIOS && ua.match(/android/i) != null,
  9. isMobile = isIOS || isAndroid;
  10.  
  11. function getIntentIframe() {
  12. if (!loadIframe) {
  13. var iframe = document.createElement("iframe");
  14. iframe.style.cssText = "display:none;width:0px;height:0px;";
  15. document.body.appendChild(iframe);
  16. loadIframe = iframe;
  17. }
  18. return loadIframe;
  19. }
  20. function getPlayUrl(iVideoID, sLy) {
  21. var videoplayURL = iVideoID == "" ? "" : "http://m.video.baomihua.com/m/" + iVideoID;
  22. videoplayURL = videoplayURL == "" ? "" : videoplayURL + (sLy == "" ? "" : "_ly=" + sLy);
  23. return videoplayURL;
  24. }
  25. var appInstall = {
  26. isChrome: ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
  27. isAndroid: ua.match(/(Android);?[\s\/]+([\d.]+)?/),
  28. isWeixin: ua.match(/MicroMessenger/i) != null,
  29. isUC: ua.match(/UCBrowser/i) != null,
  30. timeout: 500,
  31. /**
  32. * 尝试跳转appurl,如果跳转失败,进入h5url
  33. * @param {Object} appurl 应用地址
  34. * @param {Object} chromeurl 应用地址
  35. * @param {Object} h5url http地址
  36. */
  37. open: function (appurl, chromeurl, h5url) {
  38. var t = Date.now();
  39. appInstall.openApp(appurl);
  40. setTimeout(function () {
  41. if (Date.now() - t < appInstall.timeout * 2 + 100) {
  42. h5url && appInstall.openH5(h5url);
  43. }
  44. }, appInstall.timeout)
  45.  
  46. },
  47. openApp: function (appurl) {
  48. if (appInstall.isChrome) {
  49. if (appInstall.isAndroid) {
  50. win.location.href = chromeurl;
  51. } else {
  52. win.location.href = appurl;
  53. }
  54. } else {
  55. getIntentIframe().src = appurl;
  56. }
  57. },
  58. openH5: function (h5url) {
  59. win.location.href = h5url;
  60. },
  61. playvideo: function (ivideoid, ichannelid, sLy) {
  62. var videoplayURL = getPlayUrl(ivideoid, sLy);
  63. if (sLy == "uc" || sLy == "bdqyy") {
  64. window.location = videoplayURL;
  65. return;
  66. }
  67. if (!isAndroid || appInstall.isWeixin || appInstall.isUC) {
  68. window.location = videoplayURL;
  69. return;
  70. }
  71.  
  72. appurl = getAndroidAppUrl(ichannelid, ivideoid, sLy);
  73. chromeurl = getChromeIntent(ichannelid, ivideoid, sLy);
  74. var sRedirect = getDownLoadURL(ichannelid, ivideoid, sLy);
  75. mobileAppInstall.open(appurl, chromeurl, sRedirect);
  76. }
  77. }
  78.  
  79. return appInstall;
  80. function getDownLoadURL(iChannelid, iVideoid, sLy) {
  81. var downloadUrl = "http://m.video.baomihua.com/play2/player/dlVideoApp.htm?videoid=" + iVideoid;
  82. downloadUrl = downloadUrl + (iChannelid == "" ? "" : "&channelid=" + iChannelid);
  83. downloadUrl = downloadUrl + (sLy == "" ? "" : "&ly=" + sLy);
  84. return downloadUrl;
  85. }
  86. function getAndroidAppUrl(iChannelid, iVideoid, sLy) {
  87. var dl = "pmhapp://video.view/play";
  88. switch (parseInt(iChannelid)) {
  89. case 13:
  90. dl = "pmhapp://video.view/play";
  91. break;
  92. case 3:
  93. dl = "pmhapp://video.view/play";
  94. break;
  95. case 55:
  96. dl = "pmhgcw://video.view/play";
  97. break;
  98. default:
  99. dl = "pmhapp://video.view/play";
  100. break;
  101. }
  102. return dl + "?id=" + iVideoid + (sLy ? "&ly=" + sLy : "");
  103. }
  104. function getChromeIntent(iChannelid, iVideoid, iLy) {
  105. // 根据自己的产品修改吧
  106. var dl = "intent://video.view/play?id=" + iVideoid + (iLy ? "&ly=" + iLy : "") + "#Intent;scheme=pmhapp;package=com.com.baomihuawang.androidclient;end";
  107. switch (parseInt(iChannelid)) {
  108. case 13:
  109. dl = "intent://video.view/play?id=" + iVideoid + (iLy ? "&ly=" + iLy : "") + "#Intent;scheme=pmhapp;package=com.com.baomihuawang.androidclient;end";
  110. break;
  111. case 3:
  112. dl = "intent://video.view/play?id=" + iVideoid + (iLy ? "&ly=" + iLy : "") + "#Intent;scheme=pmhapp;package=com.com.baomihuawang.androidclient;end";
  113. break;
  114. case 55:
  115. dl = "intent://video.view/play?id=" + iVideoid + (iLy ? "&ly=" + iLy : "") + "#Intent;scheme=pmhgcw;package=com.com.baomihuawang.androidclient;end";
  116. break;
  117. default:
  118. dl = "intent://video.view/play?id=" + iVideoid + (iLy ? "&ly=" + iLy : "") + "#Intent;scheme=pmhapp;package=com.com.baomihuawang.androidclient;end";
  119. }
  120. return dl;
  121. }
  122. })();
  1. <a class="link" href="javascript:mobileAppInstall.playvideo(35846544,8,'');"></a>

通过超链接打开App应用的更多相关文章

  1. Android应用安全开发之浅谈网页打开APP

    一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布 ...

  2. 微信扫描打开APP下载链接提示代码优化

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  3. 微信扫描打开APP下载链接提示代码优化(转)

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  4. 使用扫描二维码打开app

    应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...

  5. 实现微信浏览器内打开App Store链接(已被和谐,失效了)

    微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href=”http://itunes.apple.com/us/app/id399608199″& ...

  6. h5分享页面打开APP

    项目中 直播app分享出来的直播h5页面 点击进入按钮:已下载app 就进入app,未下载跳转到下载页面 判断是安卓还是ios var u = navigator.userAgent; var isA ...

  7. Android按下home键后重新打开app进入主activity的问题

    问题阐述: 当我们写一款App的时候,势必会有这种情况:用户已经进行了多级的操作,现返回栈中已存在多个activity,那么这个时候我们想回到最初的activity难道要一层层的返回吗,对用户来说 无 ...

  8. 手机浏览网页或打开App时莫名弹出支付宝领红包界面的原因及应对措施

    自从支付宝推出扫码领红包活动后,这种模式独特的赏金机制,短时间内吸引了大量的关注,但是随之也产生了很多的问题,比由于如在赏金的驱动下,微信群里铺天盖地的红包口令,朋友圈里各式各样的领红包二维码图片, ...

  9. Android 网页打开app(或者打开指定页面)并且接收参数

    网页打开app 现实描述场景: 1.短信通知中通知内容,比如信息中一个咨询详情,流程步骤,信息中的地址打开的是一个网页,网页打开就指定app或者app中的指定页面 html代码 <html> ...

随机推荐

  1. app抓包

    http://www.360doc.com/content/14/1126/11/9200790_428168701.shtml 记得下载证书  不然有些网站是抓不到的

  2. ThinkPHP的数据库访问的简单操作

    传统的sql与ThinkPHP中的sql相比较   以user表为例 $user=M('user'); 1: SELECT * FROM user----------$user->select( ...

  3. Ajax无刷新提交表单和显示

    ajax无刷新表单提交:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  4. 求职,找工作,平台大PK

    国内 猎聘网:www.lietou.com 拉钩网:Lagou.com 智联招聘:www.zhaopin.com 前程无忧:http://www.51job.com/ 中华英才网:chinahr.co ...

  5. asp.net mvc+web api+easyui

    前奏:第一次写博客,记录一下学习和开发的过程. 现在写的是一个后台管理系统,有基本的权限功能,其他功能都可以扩展.用到的技术是 asp.net mvc5,web api 2,entityframewo ...

  6. .NET多线程同步方法详解

    .NET多线程同步方法详解(一):自由锁(InterLocked) .NET多线程同步方法详解(二):互斥锁(lock) NET多线程同步方法详解(三):读写锁(ReadWriteLock) .NET ...

  7. Redhat linux DNS配置指南(SCANIP配置手册)

    在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...

  8. Mybatis的学习总结:mybatis的入门介绍

    一.myBatis简述 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  9. 【转】Objective-C中的instancetype和id关键字

    原文:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5 ...

  10. iOS中的几种定时器详解

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,经过查阅资料,大概有三种方法: ...