用hbuilder返回键,有什么方法可以实现按手机上的返回键,退出app

javascript(136)
  按微信产品部副总经理张颖“每一个公众号都是一个APP”的说法,我们确实可以利用微信内置浏览器访问为公众号设计WebApp单页应用,以使得客户在访问公众号时有近似原生App的体验,不过目前这样的公众号很少,原因除了使用javascript开发单页应用的难度比开发一般的Web页面难度更高一些,更重要的一点是使用微信内置浏览器访问Web页面时,Android用户一按物理返回键就回到微信界面,而Android用户按物理返回键的习惯预期是回到上一页,这样就使得微信公众号的WebApp客户体验非常差。
  有什么方法改变这一点么?最理想的解决办法是微信自己接管用户按物理返回键这个事件,然后类似像getNetworkType一样提供javascript事件给开发者使用。不过很遗憾,腾讯目前没有提供这个事件,而且看样子将来也不打算提供。
  这个问题不是大问题,但如果不解决会影响Android用户的客户体验。幸运的是,我找到了解决办法,方法就是利用javascript window history来解决。
  由于安全原因javascript不允许修改history里已有的url链接,但可以使用pushState方法往history里增加url链接,并且提供popstate事件监测从history栈里弹出url。我们可以利用这一点,在WebApp加载主界面后先往history里压入“#”链接,然后监听popstate事件,在Android手机的浏览器,按下物理返回键默认的操作是执行window.history.back(),此时将触发popstate事件。收到popstate事件时代码显示“再按一次退出程序”div顶层标签,此时history栈已经为空,如用户再次按下物理返回键将执行默认操作回到微信。接着,我们要设定一个定时器,在指定的时间(比如2秒)后如用户没有再次按下物理返回键将再次往history里压入“#”链接,并隐藏“再按一次退出程序”div顶层标签,等待用户下一次按下物理返回键。
  javascript实现代码如下:
  监听popstate事件的代码稍作修改就可以用于任意控制单页应用中javascript生成的任意动态页面的跳转,此方法已经在微信公众号WebApp中使用,可在微信中搜索“myfunds”公众号关注体验。
源引:http://blog.csdn.net/rilyu/article/details/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:66960次
积分:1329
积分:1329
排名:千里之外
转载:404篇
(26)(50)(11)(1)(7)(3)(22)(42)(27)(64)(6)(3)(11)(62)(32)(1)(1)(18)(23)实际开发不可少(15)
点击两次再退出,可以避免误点引起退出,也可以提升用户体验。
&第一种:利用线程延时实现:
&&&&&&private int mBackKeyPressedTimes = 0;
&&&&&&&&@Override
&&&&&&&&public void onBackPressed()
&&&&&&&&&&&&&&&&if
(mBackKeyPressedTimes == 0) {
&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(this,
&再按一次退出程序&&, Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&&&&&mBackKeyPressedTimes
&&&&&&&&&&&&&&&&&&&&&&&&new
Thread() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@Override
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public
void run() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&try
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Thread.sleep(2000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
catch (InterruptedException e) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mBackKeyPressedTimes
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&}.start();
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&else{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&this.activity.finish();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&super.onBackPressed();
第二种:利用计算时间差实现 (个人觉得这种方式较为简单,而且不容易发生异常,代码较为安全)
&&&&&&&&private long exitTime = 0;
&&&&&&&&public void ExitApp()
&&&&&&&&&&&&&&&&if
((System.currentTimeMillis() - exitTime) & 2000)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(this.activity,
&再按一次退出程序&, Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&&&&&exitTime
= System.currentTimeMillis();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&this.activity.finish();
&&&&&&&&&&&&&&&&}
实现的思路如下:
  首先定义一个布尔变量,赋初始值false。然后监听退出按钮,点击退出按钮时,如果该布尔变量值为false,则把这个变量置为true;如果该变量为true,则退出程序。最后定义一个时间任务,2秒执行一次,如果布尔变量为true,2秒内没有点击返回键,则置为false。
  这样,在点击第一次退出时,仅仅改变布尔值变量,而不会退出,2秒内进行第二次点击才会退出。如果用户点击了一次,那么2秒之后布尔变量又被置为false,只有2秒内的两次点击才会退出程序。
代码如下:
private static Boolean isQuit =
Timer timer = new Timer();
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isQuit == false) {
Toast.makeText(getBaseContext(), &再按一次退出&, Toast.LENGTH_SHORT).show();
TimerTask task =
task = new TimerTask() {
public void run() {
timer.schedule(task, 2000);
System.exit(0);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:71286次
积分:1292
积分:1292
排名:千里之外
原创:54篇
转载:40篇
评论:12条
(1)(2)(1)(1)(1)(1)(3)(3)(16)(11)(18)(4)(7)(8)(2)(10)(8)需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金流量暴涨,转化飙升,销量翻倍
使用HBuilder设计APP返回工具条,熟悉html5的进
有相似问题想解决?专业顾问来帮助您
发布需求, 托管赏金
匹配服务商
选择服务商,签单
服务商工作
验收并付款
已投标服务商
综合评分:5颗星
速度:5.00
服务:5.00
态度:5.00
好评率:100%
共有1个服务商参与报价,查看更多服务商报价
参与报价,开始赚钱
提交你的报价和方案
中标后交付作品
获得任务赏金
急速:10分钟急速响应
省心:标准化服务
放心:不满意全额退款(免单)
SAAS成品行业套餐
APP成品源码套餐全民超神怎么退出游戏啊,点手机的返回键没用_百度知道温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
我的要求是点击&和手机返回键一次,返回上级如果联系点击手机返回键2次或以上,就退出系统,这个要怎么写我的是这样写的mui.plusReady(function() {var first =mui.back = function() {//if(mui.Key){//首次按键,提示‘再按一次退出应用’if (!first) {first = new Date().getTime();mui.toast('再按一次退出应用');setTimeout(function() {first =}, 1000);} else {if (new Date().getTime() - first & 1000) {if (mui.os.ios) {plus.runtime.quit();} else {plus.android.runtimeMainActivity().moveTaskToBack(false);}}//}}}) 12:28&&2 个回复0&例子:plus.key.addEventListener('backbutton',function(){if(confirm('确认退出?')){plus.runtime.quit();}},false); 11:38&0你可以参考下面的js文件,需要每个页面都引入,当然你可以通过修改判断条件,注意,我这个只是手机版直接加js改成app。//取消浏览器的所有事件,使得active的样式在手机上正常生效
document.addEventListener('touchstart',function(){
return false;
// 禁止选择
document.oncontextmenu=function(){
return false;
// H5 plus事件处理
var as='slide-in-right',at=200;// 默认动画时间
// 扩展API准备完成后要执行的操作
function plusReady(){
// 隐藏滚动条
plus.webview.currentWebview().setStyle({scrollIndicator:'none'});
// Android处理返回键
var pageUrl=window.location.href;
var first=null;
plus.key.addEventListener('backbutton',function(){
//根据url判断是否返回到首页,是-&退出,否则返回上一页
if(pageUrl.indexOf('index')==-1){
history.back();
if(!first){
first=new Date().getTime();
shouQuit();//弹出窗
setTimeout(function(){
first=null;
if(new Date().getTime()-first&1500){
plus.runtime.quit();
//扩展API是否准备好,如果没有则监听“plusready"事件
if(window.plus){
plusReady();
document.addEventListener('plusready',plusReady,false);
function shouQuit(){
var quit=$('&div class="quitBox" style="position:bottom: 11%;width: 100%;display:"&'
+'&p style="background: #000;border-radius: 5width: 150margin: 0text-align:height: 36line-height: 36color: #"&再按一次退出程序&/p&'
+'&/div&');
$('body').append(quit);
$('.quitBox').fadeIn(500);
setTimeout(function(){
$('.quitBox').fadeOut(500);
阅读(103)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'back返回和退出怎么写?',
blogAbstract:'back返回和退出怎么写?',
blogTag:'hbuilder,返回退出',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:6,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 hbuilder 返回 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信