从网上搜到之前手机中判断App是否安装可以通过onblur事件+定时器来实现。

但现在要做这个功能时,按网上的说法已经不能实现了。因为现在浏览器中打开App,window不会触发onblur事件。

在尝试几次后发现,虽然window.onblur没有触发,但定时器仍然会停止,所以使用这个特点就尝试做了一个demo。

dome中包含2个页面,一个主页面,另一个用来打开App的页面:

主页面

<script type="text/javascript">
var log = function (msg) {
$('body').append('<div class="log">' + msg + '</div>');
}; var tmCheck; function testApp(){
var $ifr = $('<iframe id="ifr"></iframe>')
$ifr.attr('src', 'checkapp.html');
$('body').append($ifr); tmCheck = setTimeout(function(){
log('timeout, 未安装');
}, 3000);
} function checkApp(state){
if( state == true ){
clearTimeout(tmCheck);
return;
} else {
log('checkApp, 未安装');
}
}
</script>
<button onclick="testApp();">Test</button>

checkApp.html

<script type="text/javascript">
function getSearchParam(key){
var result = window.location.search.match(new RegExp("(?:\\?|&)" + key + "=([^&]*)"));
return result ? result[1] : '';
} var ticket = getSearchParam('_');
if( ticket != '' ){
if( Date.now() - ticket < 2500 ){
window.parent.checkApp(false);
}
} else {
setTimeout(function(){
var t = Date.now();
location.href = 'app打开协议://';
setTimeout(function(){
window.parent.checkApp(true);
location.href = 'checkapp.html?_=' + t;
}, 1500);
}, 100);
}
</script>

在手机浏览器中判断App是否已安装的更多相关文章

  1. 在web浏览器中判断app是否安装并直接打开

    最近公司App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形成 ...

  2. 判断APP是否已安装

    NSString *str = [NSString stringWithFormat:@"%@://%@",[dic objectForKey:@"ios_url_sch ...

  3. 一个JS判断客户端是否已安装某个字体(Only IE)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 【js】手机浏览器端唤起app,没有app就去下载app 的方法

    这种功能的作用: 1.一般公司有自己的app,而app是需要不断有新用户涌入才能持续运营,达到不错的收入.就需要使用这种方式进行引入新的用户. 2.一些内容在网页端体验不好,或者一些功能需要app内才 ...

  5. 手机浏览器跳转APP

    背景 对于APP来说,回流分享页是最好的最便宜的也是最病毒式的拉新方式.让新用户去下载APP是重要的.对老用户来说,可以直接调起APP也是提升用户体验和让用户有侵入式体验的重要手段.所以我们一起来看看 ...

  6. 手机浏览器中屏蔽img的系统右键菜单context menu

    我们知道通过oncontextmenu事件可以屏蔽浏览器右键菜单 $('img').on("contextmenu",function(E){E.preventDefault(); ...

  7. IE浏览器中判断IE版本

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...

  8. 使用Android-Debug-Database 在浏览器中查看App的数据库

    使用参考:http://www.jianshu.com/p/89ccae3e590b源码地址:https://github.com/amitshekhariitbhu/Android-Debug-Da ...

  9. C#中判断socket是否已断开的方法

    记得以前Delphi/BCB里的socket编程,要判断[连接的另一方]是否断开了,只要在ondisconnect事件里处理就行了!如今在C#中,这个问题的确还是个问题哦!        首先,Soc ...

随机推荐

  1. link(外部资源关系)

    规定了外部资源与当前文档的关系 常于链接样式表<link href="/media/examples/link-element-example.css" rel=" ...

  2. PTA 1004 Counting Leaves

    题目描述: A family hierarchy is usually presented by a pedigree tree. Your job is to count those family ...

  3. 为什么 MySQL 使用 B+ 树

    为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确,大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正 ...

  4. ElasticSearch安装---Windows环境

    一.前提条件 已经安装了jdk 1.8 二.下载 中文官网: https://www.elastic.co/cn/ 中文官网下载: https://elasticsearch.cn/download/ ...

  5. Prettier - Code formatter使用

    更多VSCode插件使用请访问:VSCode常用插件汇总 Prettier - Code formatter这是一款 格式化js.css代码插件,暂不解释. Prettier是什么? Prettier ...

  6. 《深入理解java虚拟机》读书笔记十——第十一章

    第十一章  晚期(运行期)优化 1.HotSpot虚拟机内的即时编译 解释器与编译器: 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生 ...

  7. 杭电oj_2035——人见人爱A^B(java实现)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2035 思路:(网上学来的,偏向数学的不咋懂/捂脸)每次乘法的时候都取后三位(可能有些含糊,直接看代码吧 ...

  8. BK: How to read a book 第四篇

    第四篇 阅读的最终目标 第二十章 阅读的第四个层次:主题阅读 在做主题阅读时的要求: 1. 知道:知道应该读哪些书. 在面对如此庞大的相关资料时,我们要如何决定我们要研究的主题是什么呢. 如何判断属于 ...

  9. (转)正则表达式:string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement

    string.replaceAll中的特殊字符 string.replaceAll(String regex, String replacement)中的replacement参数即替换内容中含有特殊 ...

  10. 你所不知道的locust

    from locust import HttpLocust, TaskSet, task import uuid, time import logging,json # https://docs.lo ...