js判断移动端是否安装某款app的多种方法


Posted in Javascript onDecember 18, 2015

本文实例讲解了js判断移动端是否安装某款app的多种方法,分享给大家供大家参考,具体内容如下

第一种方法:

一:判断是那种设备

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

二:安卓设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载app

android();

if(isAndroid){
      function android(){
        window.location.href = "openwjtr://com.tyrbl.wjtr"; /***打开app的协议,有安卓同事提供***/
        window.setTimeout(function(){
           window.location.href = "http://www.wjtr.com/download/index.html"; /***打开app的协议,有安卓同事提供***/
        },2000);
      };

二:ios设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载appios();

if(isiOS){
      function ios(){
        var ifr = document.createElement("iframe");
        ifr.src = "openwjtr://com.tyrbl.wjtr"; /***打开app的协议,有ios同事提供***/
        ifr.style.display = "none"; 
        document.body.appendChild(ifr);
        window.setTimeout(function(){
          document.body.removeChild(ifr);
           window.location.href = "http://www.wjtr.com/download/index.html"; /***下载app的地址***/
        },2000)
      };
}

第二种方法:

虽然在Js中可以启动某个app,但是并不能判断该app是否安装;
启动app需要的时间较长,js中断时间长,如果没安装,js瞬间就执行完毕。直接上代码吧!
html代码:

<a href="javascript:testApp('tel:1868888888')">打电话</a>

js代码:

function testApp(url) { 
  var timeout, t = 1000, hasApp = true; 
  setTimeout(function () { 
    if (hasApp) { 
      alert('安装了app'); 
    } else { 
      alert('未安装app'); 
    } 
    document.body.removeChild(ifr); 
  }, 2000) 
 
  var t1 = Date.now(); 
  var ifr = document.createElement("iframe"); 
  ifr.setAttribute('src', url); 
  ifr.setAttribute('style', 'display:none'); 
  document.body.appendChild(ifr); 
  timeout = setTimeout(function () { 
     var t2 = Date.now(); 
     if (!t1 || t2 - t1 < t + 100) { 
       hasApp = false; 
     } 
  }, t); 
}

第三种方法:

最近在做项目的wap版,有个需求就是,先判断手机上是否有我们的APP应用,如果有的话打开应用,没有才跳转到wap页面。 
wap简单来说就是运行在移动端浏览器上的网站。不管应用在什么地方,总之就是浏览器呗,可以通过JS来判断本地是否有某应用,实现方式实际就是将http协议转为本地软件协议。 
还是直接贴代码吧。
 如下: 

<script language="javascript">
 if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
  var loadDateTime = new Date();
  window.setTimeout(function() {
   var timeOutDateTime = new Date();
   if (timeOutDateTime - loadDateTime < 5000) {
    window.location = "要跳转的页面URL";
   } else {
    window.close();
   }
  },
  25);
  window.location = " apps custom url schemes ";
 } else if (navigator.userAgent.match(/android/i)) {
  var state = null;
  try {
   state = window.open("apps custom url schemes ", '_blank');
  } catch(e) {}
  if (state) {
   window.close();
  } else {
   window.location = "要跳转的页面URL";
  }
 }
</script>

apps custom url schemes 是什么呢?
其实就是你与APP约定的一个协议URL,你的IOS同事或Android同事在写程序的时候会设置一个URL Scheme,
例如设置:
URL Scheme :app
然后其他的程序就可以通过URLString = app://  调用该应用。
还可以传参数,如:
app://reaction/?uid=1
原理:500ms内,本机有应用程序能解析这个协议并打开程序,调用该应用;如果本机没有应用程序能解析该协议或者500ms内没有打开这个程序,则执行setTimeout里面的function,就是跳转到你想跳转的页面。

以上就是js判断移动端是否安装某款app的多种方法,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jquery 常用操作整理 基础入门篇
Oct 14 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
通过jQuery源码学习javascript(二)
Dec 27 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
jq选项卡鼠标延迟的插件实例
May 13 Javascript
JS OffsetParent属性深入解析
Jan 13 Javascript
解决js下referer兼容各大浏览器的方法
Nov 03 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
微信小程序与后台PHP交互的方法实例分析
Dec 10 Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 Javascript
axios如何取消重复无用的请求详解
Dec 15 Javascript
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
javascript实现保留两位小数的多种方法
Dec 18 #Javascript
原生js实现图片轮播特效
Dec 18 #Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 #Javascript
浏览器兼容性问题大汇总
Dec 17 #Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 #Javascript
js调出上下文菜单的实例
Dec 17 #Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 #Javascript
You might like
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
jQuery创建插件的代码分析
2011/04/14 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python跳出双层for循环的解决方法
2019/06/24 Python
python批量修改ssh密码的实现
2019/08/08 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
养殖行业的创业计划书
2014/01/05 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
保护环境的建议书
2014/03/12 职场文书
信息技术课后反思
2014/04/27 职场文书
学雷锋的心得体会
2014/09/04 职场文书
大学迎新生标语
2014/10/06 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
党支部承诺书
2015/01/20 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL