<p><a href="xxx://app/question/95">点击跳转,直接回帖报名</a></p>
 /* global navigator, document, window */

 var UA = {
     App: navigator.userAgent.indexOf('naitangApp') >= 0,
     WeiXin: navigator.userAgent.indexOf('MicroMessenger') >= 0,
     Android: navigator.userAgent.indexOf('Android') >= 0,
     iPhone: navigator.userAgent.indexOf('iPhone') >= 0
 }
 var timeout
 function replaceSchema(href) {
     var schema = [
         ['xxx://app/question/', 'http://www.xxx.com/question/']
     ]
     var len = schema.length
     for (var i = 0; i < len; i += 1) {
         href = href.replace(schema[i][0], schema[i][1])
     }
     return href
 }
 document.querySelector('body').addEventListener('click', function(e) {
     var tg = (window.event) ? e.srcElement : e.target
     while (tg.nodeName.toUpperCase() !== 'BODY') {
         if (tg && tg.nodeName.toUpperCase() === 'A') {
             var href = tg.getAttribute('href')
             if (href.indexOf('naitang://') === 0) {
                 e.preventDefault()
                 if (UA.App) {
                     window.location.href = href
                 } else if (UA.WeiXin) {
                     window.location.href = 'http://a.app.qq.com/o/simple.jsp?pkgname=com.xxxxxx'
                 } else if (UA.Android) {
                     window.location.href = href
                     timeout = setTimeout(function() {
                         window.location.href = 'http://a.app.qq.com/o/simple.jsp?pkgname=com.xxxxxx'
                     }, 1000)
                 } else if (UA.iPhone) {
                     window.location.href = href
                     timeout = setTimeout(function() {
                         window.location.href = 'itms-apps://itunes.apple.com/cn/app/nai-tang/id00000000?mt=8'
                     }, 1000)
                 } else {
                     var pchref = tg.getAttribute('data-pc')
                     href = pchref ? pchref : replaceSchema(href)
                     window.location.href = href
                 }
             }
             break
         } else {
             tg = tg.parentNode
         }
     }
 }, false)
 function onVisibilityChanged() {
     var hidden = document.hidden || document.webkitHidden
     if (hidden && timeout) {
         window.clearTimeout(timeout)
     }
 }
 document.addEventListener('visibilitychange', onVisibilityChanged, false)

HTML5 唤起 APP的更多相关文章

  1. h5页面唤起app(iOS和Android),没有安装则跳转下载页面

    浏览器和app没有通信协议,所以h5不知道用户的手机释放安装了app.因此只能是h5去尝试唤起app,若不能唤起,引导用户去下载我们的app. 微信里屏蔽了 schema 协议,如果在微信中打开h5, ...

  2. Ionic – 强大的 HTML5 Mobile App 开发框架

    Ionic 是一个强大的 HTML5 应用程序开发框架,可以帮助您使用 Web 技术,比如 HTML.CSS 和 Javascript 构建接近原生体验的移动应用程序.Ionic 主要关注外观和体验, ...

  3. HTML5手机APP开发入(5)

    HTML5手机APP开发入(5) 回顾一下 HTML5手机APP开发入(4) 如何自定义Component,directive HTML5手机APP开发入(3) 如何实现MVC的代码重构,自定义一个P ...

  4. HTML5手机APP开发入(4)

    HTML5手机APP开发入(4) 课程内容 完成一个自定义的Component用来展现通讯录用户的明细信息如下图 http://bootsnipp.com/snippets/featured/prof ...

  5. HTML5手机APP开发入(3)

    HTML5手机APP开发入(3) 课程内容: 按照AngularJs MVC框架进行代码重构,新建一个DataService服务类使用SQLite插件实现储存对通讯录的本地存储. 涉及的知识点: An ...

  6. HTML5手机APP开发入门(2)

    HTML5手机APP开发入门(2) 课程内容 使用IonicFramework v2 + angular 2 完成一个简单的联系人列表的操作,有三个页面: ListPage,DetailPage,Ad ...

  7. HTML5手机APP开发入门(1)

    HTML5手机APP开发入门(1) 开发框架 Ionicframework V2 + Angular 2 具体内容可以参考一下网站 http://ionicframework.net/ http:// ...

  8. h5唤起APP并检查是否成功

    // 检查app是否打开 function checkOpen(cb) { const clickTime = +(new Date()); function check(elsTime) { if ...

  9. H5 唤起 APP的解决方案

    H5 页面唤起APP或跳转到下载APP的某个链接地址.总结如下: 在 IOS 中, 系统版本在 8 以下时,可以监听页面的 pagehide / visibilitychange 事件. 系统版本大于 ...

随机推荐

  1. Django中自定义过滤器的使用

    我在这里做的是: 从数据库查出id递增的一些信息,展示在前台. 编写一个过滤器判断查出数据的id是偶数的返回True 奇数返回False 1 创建项目,创建应用,注册应用,配置settings.py文 ...

  2. django 配置URLconf和获取值

    django中正确配置url匹配找到视图: 1 在项目下的settings.py中ROOT_URLCONF = "项目名.urls" 表示 前台发来请求会先去项目下的test3/u ...

  3. Python之内置函数

    内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数. 分类学习内置函数: 总共 ...

  4. jenkins创建pipeline

    新建任务的时候,有两个流水线相关的任务类型,如下图.其中:流水线更加针对单主干模式的开发,在主干目录下放一个Jenkinsfile文件,其中该文件保存了从SCM拉代码.构建.测试.发布等等流程. 而M ...

  5. 简单了解Spring的控制反转和依赖注入

    浅谈控制反转(Inversion of Control,IOC) 我们首先先来了解一下控制二字,也就是在控制"正"转的情况下,在任何一个有请求作用的系统当中,至少需要有两个类互相配 ...

  6. Java中对List去重, Stream去重

    问题 当下互联网技术成熟,越来越多的趋向去中心化.分布式.流计算,使得很多以前在数据库侧做的事情放到了Java端.今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Ja ...

  7. [Kaggle] dogs-vs-cats之建立模型

    建立神经网络模型,下面要建立的模型如下: (上图来源:训练网络时,打开tensorboard即可观察网络结构,在下一节模型训练的时候会讲到) 下面为具体步骤: Step 0:导入相关库 import ...

  8. javascript数组去重的3种方法

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! javascript数组去重 <!DOCTYPE html> <html> < ...

  9. React Native(十五)——RN中的分享功能

    终于,终于,可以总结自己使用RN时的分享功能了-- 为什么呢?且听我慢慢道来吧: 从刚开始接触React Native(2017年9月中旬)就着手于分享功能,直到自己参与公司的rn项目开发中,再到现在 ...

  10. 是否可能两个ETH私钥对应同一个地址

    原提问在这里. 笔者在使用到neon-js中的私钥生成方法时发现其使用了getRandomValues方法来生成64字符长度的私钥,进而考虑到其随机性,若是调用足够多次,依然有可能生成两个完全一样的私 ...