从网上搜到之前手机中判断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. geoserver发布地图服务

    1.      Geoserver启动 blog.csdn.net 2014-09-18 20:30 Geoserver是著名的开源GIS软件之一.也是项目中常用的地图服务软件.基于geoserver ...

  2. 二叉树(5)HuffmanTree

    构建一棵 HuffmanTree. 测试代码 main.cpp: #include <iostream> #include "HuffmanTree.h" using ...

  3. js前后端交互

    1.前后端交互模式 2.promise用法 (1)异步调用 (2)ajax回顾 (3).promise 优点:可以解决回调地狱(多层异步调用嵌套问题)(解决代码可读性低的问题) 提供简洁的api (4 ...

  4. Leetcode Week4 Find Minimum in Rotated Sorted Array II

    Question Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforeha ...

  5. render(七)

    Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node.它的定义在 src/core/instance/render.js 文件中: Vue.prototype._ ...

  6. Jmeter-简介及安装

    一.Jmeter简介 Apache Jmeter 是Apache组织的开放源代码项目,是一个纯java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. Apa ...

  7. 连接本地mysql报错

    报错信息如下: 原因为未启动本地mysql,没设置开机自启动.

  8. 【Python】浮点数用科学计数法表示

  9. C++——绪论

    计算机语言的发展 1.机器语言(二进制).汇编语言.比较难以理解和识记,与人类语言之间的差距太大: 2.高级语言,可以写出类似于人类思维的语句,可以有人们习惯的表达方式: 3.面向对象的语言,描述客观 ...

  10. linux异常 - 弹出界面 eth0:设备eth0似乎不存在

    问题描述: 用VMware vSphere Client复制虚拟机之后,出现这个问题 解决方法: service network stop service NetworkManager restart