利用 html js判断 客户端是否安装了某个app 安装了就打开 否则跳转到gp
三种方式
方式一:简单的进行打开app,延时操作若未打开直接跳gp
function isInstalled(){
var urlFrag = 'somepars';
var the_href = 'market://****';//获得下载链接
window.location.href = "appname://start" + urlFrag;//打开某手机上的某个app应用
setTimeout(function(){
window.location.href = the_href;//如果超时就跳转到app下载页
},800);
}
方式二 :添加 iframe
function isInstalled() {
var timeout, t = 1000,
hasApp = true,
urlFrag = 'somepars';
url = "appname://start" + urlFrag ;
var openScript = setTimeout(function() {
if (!hasApp) {
var durl = 'market://******';
window.location.href = durl;
}
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);
}
方式三:利用a标签,经过验证浏览器对iframe的方法支持率不高,而且同一个浏览器也会有时而能打开时而打不开的情况发生,经验证将iframe替换为a标签支持率很高
function openAppGp(ap, gp) {
//检查app是否打开
function checkOpen(cb) {
var _clickTime = +(new Date());
function check(elsTime) {
if (elsTime > 2000 || document.hidden || document.webkitHidden) {
cb(1);
} else {
cb(0);
}
}
//启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
var _count = 0, intHandle;
intHandle = setInterval(function () {
_count++;
var elsTime = +(new Date()) - _clickTime;
if (_count >= 50 || elsTime > 2000) {
clearInterval(intHandle);
check(elsTime);
}
}, 20);
}
//在iframe 中打开APP
const link = document.createElement('a');
document.body.appendChild(link);
link.setAttribute('href', ap);
link.style.display = 'none';
link.click();
// if (1) {
checkOpen(function (opened) {//checkOpen中的cbk参数 = function (opened)
if (opened == 0) {
//用户没有安装app 可以请求下载地址并跳转 跳转方法:window.location.href 即可
window.location.href = gp;
} else if (opened == 1) {
//用户打开了app 用户有安装app
console.log("Opend app");
}
});
// }
setTimeout(function () {
document.body.removeChild(link);
}, 2000);
}
注意:
1 有的浏览器会有安全验证的问题,可能会连续两次提示打开窗口,这样就需要提供白名单给到相应的浏览器开发者;
2 该方法成功率不是100%,有的手机会完全不支持, 有的浏览器也不支持 经验证opera不支持;
3 具体的market 和 打开app的协议 由产品和客户端提供;
利用 html js判断 客户端是否安装了某个app 安装了就打开 否则跳转到gp的更多相关文章
- 一个JS判断客户端是否已安装某个字体(Only IE)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
使用JS判断客户端.浏览器.操作系统类型 一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Androi ...
- 使用JS判断客户端、浏览器、操作系统类型
一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. 核心代码如下: 方法一: &l ...
- JS判断客户端是否是iOS或者Android或者ipad(二)
js判断客户端是IPAD和iphone 多了就不说了,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 funct ...
- JS判断客户端、浏览器、操作系统
一.JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. 方法一: var u = navigator.us ...
- JS判断浏览器类型,JS判断客户端操作系统
JS判断浏览器类型 function judge(){ var browser = { versions: function() { var u = navigator.userAgent, app ...
- JS判断访问设备(userAgent)加载不同页面 JS判断客户端操作系统类型(platform)
//平台.设备和操作系统 var system ={ win : false, mac : false, xll : false }; //检测平台 var p = navigator.platfor ...
- js 判断客户端 和 asp.net/C#判断客户端类型
1.js 判断客户端 <script language="JavaScript"> <!-- onload = function browserRedirect( ...
- JS判断客户端是否是iOS或者Android或者ipad(三)
* * @function: 判断浏览器类型是否是Safari.Firefox.ie.chrome浏览器 * @return: true或false * */ function isSafa ...
随机推荐
- vue_条件渲染_v-if_v-else_v-show
data: { ok: true flag: false } 1. 成对出现的 v-if 和 v-else 原理是: 标签的删除与重新创建 ,有些情况必须用 v-if <p v-if=" ...
- 7. Buffer_包描述文件_npm常用指令_fs文件读写_模块化require的规则
1. Buffer 一个和数组类似的对象,不同是 Buffer 是专门用来保存二进制数据的. 特点: 大小固定: 在创建时就确定了,且无法调整 性能较好: 直接对计算机的内存进行操作 每个元素大小为1 ...
- Go数组求和
package main import "fmt" ]int func main() { a := [],,,,} var b int for index,value := ran ...
- Java课程寒假之回答问题:如何将你的兴趣化为可以立足于社会的资本
在学校的时候干过几次兼职,算是无聊时候的外快吧,有一次是去辅导机构,在考试期间监考学生,前后大概四个小时,最后拿了四十五并且管了一顿饭,不得不说,小学生是真的皮,考试的时候有的爱讲话,有的是写完之后开 ...
- Nestjs 微服务
文档 工作示例 安装: $ npm i --save @nestjs/microservices main.ts import { NestFactory } from '@nestjs/core'; ...
- Spring的核心模块解析
Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的 ...
- 《Mysql 锁》
一:什么是锁? - 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. - 通俗的来说,锁是一种对资源的保护形式. 二:锁分类 - 表级锁 - 开销小,加锁快,没有死锁,锁定粒度大,发生锁冲突的概 ...
- Jmeter压测基础(二)——Badboy功能、Jmeter参数化、检查点、集合点、动态关联、图形监控
Badboy 以下稍微介绍一下badboy的部分功能: 1.Record;play(badboy打开后默认是recording状态) 2.Assertion(检查点/断言) 3.Variable: t ...
- react学习过程中遇到的错误记录
1.App.js的代码如下: import React, { Component } from 'react'; import Test from './components/Test.jsx'; i ...
- turtlebot3安装遇到的问题总结
turtlebot3安装遇到的问题总结 问题如下 1.ubuntu mate 开机启动 开始试了很多方法都不行,注意不要输错用户名,不然进不了系统了(进不了解决方法,找个电脑读一下这个turtlebo ...