通过扫描二维码打开app的实现代码


Posted in Javascript onNovember 10, 2016

最近有朋友问小编这样一个问题,先给大家说下项目需求:扫描二维码打开app如果用户没有这个app则提示它跳转。

用网页直接来调用app是不打可能的,必须原生那边先做一些配置。

首先,安卓和苹果的调用方法是不同的。

所以我们需要先判断一下终端。

var u = navigator.userAgent,
app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

之后最好是分别跳转到两个不同的页面去做操作,因为苹果需要在头部配置一个app-id<meta name='apple-itunes-app' content='app-id=1115968341'>

下面是苹果的代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name='apple-itunes-app' content='app-id=1115968341'>
<title></title>
</head>
<body>
<a href="https://itunes.apple.com/cn/app/yi-fang-kuai-le-xue-tang/id1115968341?mt=8" id="openApp">点击打开</a>
<script type="text/javascript"> 
//苹果
document.getElementById('openApp').onclick = function(e){ 
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为 
// 否则打开a标签的href链接 
var ifr = document.createElement('iframe'); 
ifr.src = 'iosefunbox://'; 
ifr.style.display = 'none'; 
document.body.appendChild(ifr); 
window.setTimeout(function(){ 
document.body.removeChild(ifr); 
},3000) 
};
</script>
</body>
</html>

这里的ifr.src就是你去打开app的协议路径,安卓和苹果是不一样的。<br><br><br>如果是安卓机的话就简单了

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
</head>
<body>
<a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile" id="openApp">点击打开</a>
<script type="text/javascript">
//安卓
// /**/window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile";
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为 
// 否则打开a标签的href链接 
var ifr = document.createElement('iframe'); 
ifr.src = 'efunbox://efunbox.app/efunbox/open'; 
ifr.style.display = 'none'; 
document.body.appendChild(ifr); 
window.setTimeout(function(){ 
document.body.removeChild(ifr); 
},3000);
</script>
</body>
</html>

这是我们原先的需求,后来变了,说苹果直接跳转到appstore里面就好了,不用直接打开,安卓的话需要直接打开。

这样我就直接把它们集合在一个网页就行。

我上面的a链接是直接跳转到腾讯应用宝里面。

用网页扫描访问的话是没问题的,

但是我就感觉会出事,后来拿微信扫一扫就蒙逼了。安卓只会打开a链接,跳转不进app,因为被微信拦截掉了,苹果也一样,解决的方案只能是点击右上角,提示用户在浏览器打开就没问题。这种方法是无奈之举,但后来针对苹果机找到了一个解决它的方案就是,a链接的跳转直接跳腾讯应用宝上架的链接,然后微信内部会处理帮你自动跳转到appstore里面。

最后是整合了一下的代码。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body id="body">
<script type="text/javascript">
var u = navigator.userAgent,
app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if(isIOS){
window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile"; 
}
if(isAndroid){
alert("请点击右上角在浏览器打开");
window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile";
var ifr = document.createElement('iframe'); 
ifr.src = 'efunbox://efunbox.app/efunbox/open'; 
ifr.style.display = 'none'; 
document.body.appendChild(ifr); 
window.setTimeout(function(){ 
document.body.removeChild(ifr); 
},3000);
}
</script>
</body>
</html>

补充:

扫描二维码跳转app

1、判断是否安装了app

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
</head> 
<body> 
<h2><a id="applink1" href="mtcmtc://profile/116201417">Open scheme(mtcmtc) defined in iPhone with parameters </a></h2> 
<h2><a id="applink2" href="unknown://nowhere">open unknown with fallback to appstore</a></h2> 
<p><i>Only works on iPhone!</i></p> 
<script type="text/javascript"> 
// To avoid the "protocol not supported" alert, fail must open another app.
var appstore = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";
function applink(fail){
return function(){
var clickedAt = +new Date;
// During tests on 3g/3gs this timeout fires immediately if less than 500ms.
setTimeout(function(){
// To avoid failing on return to MobileSafari, ensure freshness!
if (+new Date - clickedAt < 2000){
window.location = fail;
}
}, 500); 
};
}
document.getElementById("applink1").onclick = applink(appstore);
document.getElementById("applink2").onclick = applink(appstore);
</script> 
</body> 
</html>

2、打开项目工程target里面的schemurl追加://

以上所述是小编给大家介绍的通过扫描二维码打开app的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
jQuery chili图片远处放大插件
Nov 30 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
JavaScript实现动态添加,删除行的方法实例详解
Jul 02 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
ES6 Promise对象的含义和基本用法分析
Jun 14 Javascript
微信小程序图片自适应实现解析
Jan 21 Javascript
JavaScript接口实现方法实例分析
May 16 Javascript
原生js实现购物车功能
Sep 23 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 #Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 #Javascript
jquery日历插件e-calendar升级版
Nov 10 #Javascript
Vue.js开发环境搭建
Nov 10 #Javascript
js 获取本地文件及目录的方法(推荐)
Nov 10 #Javascript
javascript中的后退和刷新实现方法
Nov 10 #Javascript
jQuery中Nicescroll滚动条插件的用法
Nov 10 #Javascript
You might like
PHP编码转换
2012/11/05 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
JavaScript编写开发动态时钟
2020/07/29 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python3 log10()函数简单用法
2019/02/19 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python调用Windows命令打印文件
2020/02/07 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
Python读写Excel表格的方法
2021/03/02 Python
理货员的岗位职责
2013/11/23 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
村级四风对照检查材料
2014/08/24 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
催款函范文
2015/06/24 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
vue选项卡切换的实现案例
2022/04/11 Vue.js
如何优化vue打包文件过大
2022/04/13 Vue.js
Python自动化实战之接口请求的实现
2022/05/30 Python