利用 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的协议 由产品和客户端提供;

 

转载于:https://www.cnblogs.com/xhliang/p/10289666.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 JavaScript 中,无法直接检测应用程序是否安装,因为这需要访问设备的原生 API。但是,你可以使用一些技巧来实现这一点,例如使用特定应用程序的自定义协议或使用第三方库。 使用自定义协议: 许多应用程序都有一个自定义协议,因此可以通过检查协议是否注册来确定应用程序是否安装。例如,如果你想检查 Instagram 是否安装,可以尝试打开一个网址,该网址使用 Instagram 的自定义协议: ```javascript function isAppInstalled(appProtocol) { var appInstalled = false; var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.onload = function() { appInstalled = true; }; iframe.onerror = function() { appInstalled = false; }; iframe.src = appProtocol + '://'; document.body.appendChild(iframe); setTimeout(function() { document.body.removeChild(iframe); }, 2000); return appInstalled; } isAppInstalled('instagram'); ``` 使用第三方库: 还有一些第三方库可以在应用程序可用时执行特定操作,例如 Branch.io 或 Deeplink.me。这些库使用深度链接技术,当用户点击链接时,它们会自动打开应用程序,或者在应用程序不可用时重定向到网页。这些库还可以跟踪应用程序的安装情况和使用情况,以便在营销和分析方面提供有用的数据。 总之,虽然 JavaScript 不能直接检测应用程序是否安装,但可以使用一些技巧来实现类似的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值