通过手机浏览器直接打开Android应用程序。 如果本地已经安装了指定Android应用,就直接打开它; 如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面)。
目录[-]
<a href="http://my.oschina.net/liucundong/blog/354029#OSC_h2_1">实现效果</a>
<a href="http://my.oschina.net/liucundong/blog/354029#OSC_h2_2">实现方式</a>
<a href="http://my.oschina.net/liucundong/blog/354029#OSC_h2_3">HTML代码</a>
<a href="http://my.oschina.net/liucundong/blog/354029#OSC_h2_4">AndroidMainfext.xml</a>
实现方式不太完美,最近看了微博、京东的手机版网页,感觉他们的实现方式很不错,研究了一下,实现以下效果:
如果本地已经安装了指定Android应用,就直接打开它;如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面)。
如下图所示,在手机浏览器中访问京东的手机版网站(m.jd.com),顶部会有一个广告图,点击这个广告图,如果手机上已经安装了京东App,则直接打开,如果没有安装,则开始下载。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauITM3UDOfZVSDB3X5MzNwATMvwFMxITMvwFNxAjMvwVZjFGcz9CXzRWYvxGc19CX0VmbuEmbph2Yz9mLjlGdhR3cvw1LcpDc0RHaiojIsJye.jpg)
1.为Android应用的启动Activity设置一个Schema,如下:
2.用户点击浏览器中的链接时,在动态创建一个不可见的iframe,并且让这个iframe去加载步骤1中的Schema,如下:
3,如果在指定的时间内没有跳转成功,则当前页跳转到apk的下载地址(或下载页),如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<code><!</code><code>doctype</code> <code>html></code>
<code><</code><code>html</code><code>></code>
<code> </code><code><</code><code>head</code><code>></code>
<code> </code><code><</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Content-Type"</code> <code>content</code><code>=</code><code>"text/html; charset=utf-8"</code><code>></code>
<code> </code><code><</code><code>meta</code> <code>name</code><code>=</code><code>"apple-mobile-web-app-capable"</code> <code>content</code><code>=</code><code>"yes"</code><code>></code>
<code> </code><code><</code><code>meta</code> <code>name</code><code>=</code><code>"apple-mobile-web-app-status-bar-style"</code> <code>content</code><code>=</code><code>"black"</code><code>/></code>
<code> </code><code><</code><code>title</code><code>>this's a demo</</code><code>title</code><code>></code>
<code> </code><code><</code><code>meta</code> <code>id</code><code>=</code><code>"viewport"</code> <code>name</code><code>=</code><code>"viewport"</code> <code>content</code><code>=</code><code>"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,minimal-ui"</code><code>></code>
<code> </code><code></</code><code>head</code><code>></code>
<code> </code><code><</code><code>body</code><code>></code>
<code> </code><code><</code><code>div</code><code>></code>
<code> </code><code><</code><code>a</code> <code>id</code><code>=</code><code>"J-call-app"</code> <code>href</code><code>=</code><code>"javascript:;"</code> <code>class</code><code>=</code><code>"label"</code><code>>立即打开&gt;&gt;</</code><code>a</code><code>></code>
<code> </code><code><</code><code>input</code> <code>id</code><code>=</code><code>"J-download-app"</code> <code>type</code><code>=</code><code>"hidden"</code> <code>name</code><code>=</code><code>"storeurl"</code> <code>value</code><code>=</code><code>"http://m.chanyouji.cn/apk/chanyouji-2.2.0.apk"</code><code>></code>
<code> </code><code></</code><code>div</code><code>></code>
<code> </code><code><</code><code>script</code><code>></code>
<code> </code><code>(function(){</code>
<code> </code><code>var ua = navigator.userAgent.toLowerCase();</code>
<code> </code><code>var t;</code>
<code> </code><code>var config = {</code>
<code> </code><code>/*scheme:必须*/</code>
<code> </code><code>scheme_IOS: 'cundong://',</code>
<code> </code><code>scheme_Adr: 'cundong://splash',</code>
<code> </code><code>download_url: document.getElementById('J-download-app').value,</code>
<code> </code><code>timeout: 600</code>
<code> </code><code>};</code>
<code> </code><code>function openclient() {</code>
<code> </code><code>var startTime = Date.now();</code>
<code> </code><code>var ifr = document.createElement('iframe');</code>
<code> </code><code>ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;</code>
<code> </code><code>ifr.style.display = 'none';</code>
<code> </code><code>document.body.appendChild(ifr);</code>
<code> </code><code>var t = setTimeout(function() {</code>
<code> </code><code>var endTime = Date.now();</code>
<code> </code><code>if (!startTime || endTime - startTime < config.timeout + 200) { </code>
<code> //</code><code>window.location = config.download_url;</code>
<code> </code><code>} else {</code>
<code> </code>
<code> </code><code>}</code>
<code> </code><code>}, config.timeout);</code>
<code> </code><code>window.onblur = function() {</code>
<code> </code><code>clearTimeout(t);</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>window.addEventListener("DOMContentLoaded", function(){</code>
<code> </code><code>document.getElementById("J-call-app").addEventListener('click',openclient,false);</code>
<code> </code><code>}, false);</code>
<code> </code><code>})()</code>
<code> </code><code></</code><code>script</code><code>></code>
<code> </code><code></</code><code>body</code><code>></code>
<code></</code><code>html</code><code>></code>
本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/4661550.html,如需转载请自行联系原作者