这种功能的作用:

1.一般公司有自己的app,而app是需要不断有新用户涌入才能持续运营,达到不错的收入。就需要使用这种方式进行引入新的用户。

2.一些内容在网页端体验不好,或者一些功能需要app内才能实现,就需要将用户引入app中。打开app并自动跳到相应页面。

首先,这个方法仅适用于移动端h5页面,一般的智能机都是可以使用的。这里使用的是es5的代码模式,容易理解。

知道了需求,我们看看如何实现:

1.首先要通过UA判断当前浏览器UA 并转大写。用来分别针对安卓和ios机型做2种不一样的处理。

var UA=navigator.userAgent.toUpperCase();

2.根据UA判断的安卓还是ios机型,分别做处理。

安卓设备:

通过隐藏iframe方式实现。iframe中请求协议启动地址,创建iframe需要时间,延迟一点时间,将iframe加入dom,产生请求。

如果app已安装,浏览器就会弹出一个提示框,问用户是否启动app。

如果未安装,浏览器等待一秒后就会去下载。

之所以使用iframe,为了防止location跳转后,js请求中断,跳入空白页。

代码中的Data.now()-t < 1200,只所以是1200,其实也是一个估计值,为了大部分解决一些已经安装的app,1秒后还是会跳转下载。因为打开app的瞬间,浏览器可能会卡一下js的执行导致延迟时间变长。超出1200ms就可以不用去下载了。

//如果是安卓浏览器(自带浏览器、UA浏览器、QQ浏览器等)
if(UA.indexOf("ANDROID")!=-1){
//创建iframe
var ifr=document.createElement("iframe");
//iframe设置为app的协议打开方式地址
ifr.src="cmread://cmread.com/client?url=wap.cmread.com/rbc/402310056/index.htm";//安卓协议启动地址
ifr.style.display="none";//隐藏
var t=Date.now();//取当前时间戳
//延迟执行iframe 实现访问app协议打开app
setTimeout(function(){
document.body.appendChild(ifr);
},96);
//延迟执行 如果1s没响应,就表示你手机中没有该app。就可以去下载了
setTimeout(function(){
if(Date.now() - t < 1200){
document.body.appendChild(ifr);
location.href="http://wap.cmread.com/r/p/pg/212/CMREADBC_Android/CMREADBC_Android.apk";//安卓下载地址
}
},1001);
}

IOS设备:

首先,ios浏览器已经不支持再使用iframe了,所以上面的方式不适合用在ios上。

因此,这里只能采用location的方式。

如果安装了app,ios浏览器打开app协议前就会弹出个框,提示是否打开。

如果没有安装,就不会弹出这个提示。

//如果是ios浏览器(safari、UA浏览器、QQ浏览器等)
else if(UA.indexOf("IOS")!=-1 || UA.indexOf("IPHONE")!=-1){
var t=Date.now();//取当前时间戳
//延迟直接跳转唤起app协议地址
setTimeout(function(){
location.href='cmread://cmread.com/clientjson={"activity":{"url":"http://wap.cmread.com/rbc/402310056/index.htm"}}&contentId=1004';//ios协议启动地址
},96);
//延迟执行 如果1s没响应,就表示你手机中没有该app。就可以去下载了
setTimeout(function(){
if(Date.now() - t < 1200){
location.href="https://itunes.apple.com/cn/app/he-yue-du/id863837323?mt=8&uo=4&at=10lM6r";//ios下载地址
}
},1001);
}

【js】手机浏览器端唤起app,没有app就去下载app 的方法的更多相关文章

  1. JS手机浏览器判断(转)

    整理查询一下,js判断手机浏览器的方法 <script type="text/javascript"> /* * 智能机浏览器版本信息:包括微信内置 * */ var ...

  2. [转] js在浏览器端对二进制流进行AES加密和解密

    开始解密 简单了解一下所用的的AES加密算法,我们用的是AES的CFB加密方式,服务端会提供给我一个key和iv的二进制字节串.密文也是二进制字节串. 我用的加密/解密插件: crypto-js 一般 ...

  3. js手机移动端选择插件 mobileSelect.js

    一.mobileSelect获取方法 mobileSelect支持单选.多级联动.自定义回调函数.二次渲染.最新版本下载地址[2017-09-21更新]: https://github.com/onl ...

  4. 遵循amd规范的require.js(适合浏览器端)

    1. 下载require.js 2. 引用 html <!DOCTYPE html> <html lang="en"> <head> <m ...

  5. 关于CSS属性clip在手机浏览器端的兼容性问题

    由于自己的6坏了拿去修了所以这两天使用了同事一只山寨安卓机和自己早年的小4,在今天的页面测试中,对于img中进行clip操作在这两台机子中均不能实现,后借用同事的6发现clip能正常展现,其中安卓版本 ...

  6. js手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    if(window.navigator.userAgent.indexOf('Android') > -1 || window.navigator.userAgent.indexOf('Adr' ...

  7. js手机浏览器video标签会一直置顶,遮盖住弹出层问题

    <video x5-playsinline="" playsinline="" webkit-playsinline="">&l ...

  8. 浏览器中唤起native app || 跳转到应用商城下载

    前段时间遇到一个小需求:要求在分享出来的h5页面中,有一个立即打开的按钮,如果本地安装了我们的app,那么点击就直接唤起本地app,如果没有安装,则跳转到下载. 因为从来没有做过这个需求,因此这注定是 ...

  9. 手机浏览器跳转APP

    背景 对于APP来说,回流分享页是最好的最便宜的也是最病毒式的拉新方式.让新用户去下载APP是重要的.对老用户来说,可以直接调起APP也是提升用户体验和让用户有侵入式体验的重要手段.所以我们一起来看看 ...

随机推荐

  1. linux配置基本业务

    1.安装一些必备软件 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel ...

  2. [vue]webpack使用样式

    webpack: 使用自己写样式 main.js导入全局生效 import Vue from 'vue' import App from './App.vue' import './index.css ...

  3. 3-Python3 环境搭建

  4. cocos2dx 3.x(游戏中的储存-UserDefault)

      引擎提供的UserDefault可以简单地储存游戏中的信息,例如背景音乐音效的开关状态,用户名等等. UserDefault是一个单例对象,可以用getInstance方法来获得. 如果是第一次调 ...

  5. EF There is already an open DataReader associated with this Command

    捕捉到 System.InvalidOperationException _HResult=-2146233079 _message=意外的连接状态.在使用包装提供程序时,请确保在已包装的 DbCon ...

  6. 分享一种系统事故&问题处理反馈方式(COE)

    标签: COE, 复盘 如下为2014/11月份的邮件. 丁总,如下为摇钱树标的交易订单号重复事故的发生及处理过程.COE(Correction Of Error)是我们在JD研发部时使用的一种事故& ...

  7. JS实例3

    window.setInterval("Time()",1); function Time() { var date = new Date();//当前时间函数 var n = d ...

  8. SV通过DPI调用C

    Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式. 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可 ...

  9. 强化学习---TRPO/DPPO/PPO/PPO2

    时间线: OpenAI 发表的 Trust Region Policy Optimization, Google DeepMind 看过 OpenAI 关于 TRPO后, 2017年7月7号,抢在 O ...

  10. UIView的背景颜色

    一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色 + (UIColor *)blackColor;      // 0.0 white 黑色 + (UIColor * ...