从网页监听Android设备的返回键
2016-06-22 13:08
302 查看
最近做了一个抽奖活动,在苹果上运行起来是很正常,但是在Andriod 手机上就出现了问题:
当我们刮了奖之后,抽奖的剩余次数为0,然后我们去填写领奖信息,如果这时候,我们按Andriod 手机上的“返回”按钮时,页面的抽奖剩余次数仍然为1(这是因为Andriod 手机的缓存造成的这个原因,当我们返回,就直接进入到了之前的缓存页面),
为了解决这个问题,到https://github.com/iazrael/xback 中下载了xback.js,把这个文件下载下来,放到项目中去,然后直接调用方法:
XBack.listen(function(){
alert(‘oh! you press the back button’);
});
就直接在方法中写你要执行的操作就可以了。
以下的文章是摘抄别人,我是根据的他的方法解决的(原文链接:http://www.html5cn.com.cn/android/2013-04-15/264.html)
最近搞Android项目的时候,遇到一个比较蛋疼的需求,需要从Client App调用系统浏览器打开一个页面,进行杂七杂八的一些交互之后,返回到App。如何打开浏览器和如何返回App这里就不说了,有兴趣的童鞋可私下交流。
之所以说这个需求蛋疼,是因为Android有个物理返回键啊……返回键啊……键啊……啊……
用户按下返回键后,预期应该跟点击页面上的返回键一样——返回App。然而这个返回键的被按下的时候网页完全不知道啊(onbeforeunload不算),找不到直接的办法去监听,愁死我们这全苦逼程序员鸟~
虽然啊不能直接监听,曲线救国的办法,还是有滴。
经过艰苦卓绝的寻找,发现使用HTML5的History可以稍微模拟到返回键的按下事件。原理如下:
1.页面加载完成时,调用history.pushState写入一个指定状态STATE,并监听window.onpopstate;
2.当onpopstate被触发时,检查event.state是否等于STATE,如果相等,表示页面发生了后退(按下返回键或者浏览器的后退按钮),则把这次行为当作是返回键被按下了(把点击浏览器的后退按钮也误算进来了,不过没啥好法子了呀)。
嗯,为了方便调用,把这个逻辑稍微封装了下,代码见这里(https://github.com/iazrael/xback),使用方法如下:
不过这个方法有些缺陷:
1.如果项目本身使用了pushState,则历史记录会有瑕疵(多了一个历史);
2.浏览器的后退按钮点击以及调用history.back()也会被当成按下了返回键。
当我们刮了奖之后,抽奖的剩余次数为0,然后我们去填写领奖信息,如果这时候,我们按Andriod 手机上的“返回”按钮时,页面的抽奖剩余次数仍然为1(这是因为Andriod 手机的缓存造成的这个原因,当我们返回,就直接进入到了之前的缓存页面),
为了解决这个问题,到https://github.com/iazrael/xback 中下载了xback.js,把这个文件下载下来,放到项目中去,然后直接调用方法:
XBack.listen(function(){
alert(‘oh! you press the back button’);
});
就直接在方法中写你要执行的操作就可以了。
以下的文章是摘抄别人,我是根据的他的方法解决的(原文链接:http://www.html5cn.com.cn/android/2013-04-15/264.html)
最近搞Android项目的时候,遇到一个比较蛋疼的需求,需要从Client App调用系统浏览器打开一个页面,进行杂七杂八的一些交互之后,返回到App。如何打开浏览器和如何返回App这里就不说了,有兴趣的童鞋可私下交流。
之所以说这个需求蛋疼,是因为Android有个物理返回键啊……返回键啊……键啊……啊……
用户按下返回键后,预期应该跟点击页面上的返回键一样——返回App。然而这个返回键的被按下的时候网页完全不知道啊(onbeforeunload不算),找不到直接的办法去监听,愁死我们这全苦逼程序员鸟~
虽然啊不能直接监听,曲线救国的办法,还是有滴。
经过艰苦卓绝的寻找,发现使用HTML5的History可以稍微模拟到返回键的按下事件。原理如下:
1.页面加载完成时,调用history.pushState写入一个指定状态STATE,并监听window.onpopstate;
2.当onpopstate被触发时,检查event.state是否等于STATE,如果相等,表示页面发生了后退(按下返回键或者浏览器的后退按钮),则把这次行为当作是返回键被按下了(把点击浏览器的后退按钮也误算进来了,不过没啥好法子了呀)。
嗯,为了方便调用,把这个逻辑稍微封装了下,代码见这里(https://github.com/iazrael/xback),使用方法如下:
JavaScript: XBack.listen(function(){ alert('oh! you press the back button'); }); XBack.listen(function(){ alert('ah, press press press'); });
不过这个方法有些缺陷:
1.如果项目本身使用了pushState,则历史记录会有瑕疵(多了一个历史);
2.浏览器的后退按钮点击以及调用history.back()也会被当成按下了返回键。
相关文章推荐
- Ubuntu 14.04.4 Android环境配置问题汇总
- Android6.0新特性,导致读取SD卡文件的权限错误,Exception 'open failed: EACCES (Permission denied)'
- Android TextView 文字居中
- 安卓Android科大讯飞语音识别代码使用详解
- 安卓Android科大讯飞语音识别代码使用详解
- 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制
- Android进程间通信(一):使用Parcel对象完成进程间通信
- Android Studio设置代码补全
- 使用SimpleXml解析xml数据<二>
- 安卓_Android_studio_自动导包
- Android 获取imageview的图,在另一个imageview里显示。
- Android Shape Drawable 静态使用和动态使用(圆角,渐变实现)
- Android-ListView所包含的item里面的控件点击事件
- 自定义TextView带货币符号
- Android流行框架大全
- 框架模式MVC与MVP在Android中的应用
- AndroidStudio的插件(Plugin)无法卸载(Uninstall)、安装(Install)、更新(Update)
- Android 编程下 Touch 事件的分发和消费机制
- [置顶] Android代码混淆
- Gradle详解-脚本基础知识