实现效果

如下图所示,在手机浏览器中访问京东的手机版网站(m.jd.com),顶部会有一个广告图,点击这个广告图,如果手机上已经安装了京东App,则直接打开,如果没有安装,则开始下载。

实现方式

1.为Android应用的启动Activity设置一个Schema,如下:

<data android:host="splash" android:scheme="cundong"/>

2.用户点击浏览器中的链接时,在动态创建一个不可见的iframe,并且让这个iframe去加载步骤1中的Schema,如下:

var ifr = document.createElement('iframe');
ifr.src="cundong://splash"

3,如果在指定的时间内没有跳转成功,则当前页跳转到apk的下载地址(或下载页),如下:

window.location = download_url;

HTML代码

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black"/> <title>this's a demo</title>
<meta id="viewport" name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,minimal-ui">
</head>
<body>
<div>
<a id="J-call-app" href="javascript:;" class="label">立即打开&gt;&gt;</a>
<input id="J-download-app" type="hidden" name="storeurl" value="http://m.chanyouji.cn/apk/chanyouji-2.2.0.apk">
</div> <script>
(function(){
var ua = navigator.userAgent.toLowerCase();
var t;
var config = {
/*scheme:必须*/
scheme_IOS: 'cundong://',
scheme_Adr: 'cundong://splash',
download_url: document.getElementById('J-download-app').value,
timeout: 600
}; function openclient() {
var startTime = Date.now(); var ifr = document.createElement('iframe'); ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;
ifr.style.display = 'none';
document.body.appendChild(ifr); var t = setTimeout(function() {
var endTime = Date.now(); if (!startTime || endTime - startTime < config.timeout + 200) {
window.location = config.download_url;
} else { }
}, config.timeout); window.onblur = function() {
clearTimeout(t);
}
}
window.addEventListener("DOMContentLoaded", function(){
document.getElementById("J-call-app").addEventListener('click',openclient,false); }, false);
})()
</script>
</body>
</html>

AndroidMainfext.xml

<activity
android:name=".activity.LauncherActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="splash" android:scheme="cundong" />
</intent-filter>
</activity>

最新文章

  1. 使用redis构建可靠分布式锁
  2. Set和存储顺序
  3. JQUERY相关
  4. 不可或缺 Windows Native (23) - C++: 虚函数
  5. python to be Windows Daemon
  6. An AVPlayerItem cannot be associated with more than one instance of AVPlayer错误
  7. mod mono xsp
  8. BZOJ3836 : [Poi2014]Tourism
  9. python chr() unichr() ord()
  10. HTML5 &lt;Audio&gt;标签API整理(一)
  11. java笔记8之选择结构IF
  12. Android三种左右滑动效果 手势识别
  13. Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及
  14. ide phpStorm更换主题
  15. Android 倒计时按钮,倒计时发送短信验证码…
  16. 【转】UGUI研究院之缓存策略让UI打开更快(三十)
  17. Java SSM框架之MyBatis3(二)MyBatis之Mapper代理的开发方式
  18. spring boot application.properties
  19. linux中vim的常用方法
  20. Maven 添加jdk编译插件

热门文章

  1. oracle DBID,SID,DB_NAME,DB_DOMAIN,INSTANCE_NAME,DB_UNIQUE_NAME, SERVICE_NAMES 及监听参数的说明
  2. vue中的computed 与 watch
  3. BZOJ1185[HNOI2007] 最小矩形覆盖(旋转卡壳)
  4. SCAU 2015 GDCPC team_training0
  5. [ASP.NET Core 3框架揭秘] 依赖注入:IoC模式
  6. C# xml格式字符串,插入到数据库出现非法字符
  7. 短篇文档兼职看过来 python 课后作业 assignment project
  8. 07-js数据类型
  9. JavaScript、ES6中类的this指向问题
  10. wenzhang