cordova/phongap meteor build for android 中的后退按钮不会持续关闭应用程序
back button in cordova/phongap meteor build for android won't close application consistently
我已经 uilt 和 android 的 meteor 和 phonegap/cordova 应用程序:
https://play.google.com/store/apps/details?id=com.idqkd3gsl4qt51152xgy
它工作得很好(特别是考虑到我不是真正的程序员),但我一直在努力解决的一个用户体验问题是,当我按下 [=40 上的后退按钮时,应用程序不会始终关闭=].偶尔它会在第一次按下时运行,但大多数时候我必须连续卡住它 5-6 次才能关闭应用程序。
我正在使用最新的 iron-router。我正在使用的其余软件包似乎与这个问题没有特别相关,但它们如下以防万一:
标准应用程序包
咖啡脚本
natestrauser:font-真棒@4.1.0
帐户密码
aldeed:autoform
aldeed:collection2
nemo64:bootstrap
较少的
alanning:roles
joshowens:accounts-条目
mrt:accounts-admin-ui-bootstrap-3
mizzao:jquery-ui
iron:router
sacha:spin
raix:push
mizzao:bootboxjs
meteorhacks:kadira
bootstrap3-媒体查询
repo 可以在这里看到:https://github.com/The3vilMonkey/BrewsOnTap
除了似乎在启动时 cordova 应用程序发生了某种重定向之外,我无法指定此问题的确切原因。我发现的最佳解决方案是捕获 popstate 事件,当您回到开始时退出或暂停应用程序。我更喜欢这种方式,当用户返回应用程序时它不会从头开始它的生命周期.
if(Meteor.isCordova){
Meteor.startup(function(){
window.onpopstate = function () {
if (history.state && history.state.initial === true){
navigator.app.exitApp();
//or to suspend meteor add cordova:org.android.tools.suspend@0.1.2
//window.plugins.Suspend.suspendApp();
}
};
});
}
我第一次使用它时得到的一个警告是,如果用户未登录,则重定向到登录页面。如果您在执行此操作的应用程序中使用此方法,您将需要切换到呈现登录页面而不是重定向,否则您的应用将 exit/suspend 立即。
虽然 Kelly 的回答确实有效,但对于我的特定情况,它最终在功能上并不正确。关于该解决方案需要注意的重要一点是,一旦后退按钮使您 return 返回初始页面,它就会退出,而不是当您在初始页面上按下后退按钮时。
最终我使用了 cordova 的后退按钮侦听器来查看是否按下了后退按钮:
if Meteor.isCordova
Meteor.startup ->
document.addEventListener("backbutton", ->
if document.location.pathname is "/"
navigator.app.exitApp()
else
history.go(-1)
然后,如果我在我的应用程序的根目录下,我 exit/suspend,否则我只是返回历史记录。
使用后退按钮事件侦听器似乎确实覆盖了它的默认功能,因此在我的情况下调用 history.go(-1) 是必要的。
另请注意,如果您想要一个真实的历史记录,该历史记录可以在存在于初始入口点之前通过历史记录(可能多次击中应用程序的根目录)返回,则此解决方案将会中断。结合我的回答和凯利的回答可能会奏效。我发现虽然这可能是网站的预期行为,但对于移动应用程序而言并非如此。
就我而言,我混合了前面两个答案,因此效果很好。
document.addEventListener("backbutton", function(){
if (history.state && history.state.initial === true) {
navigator.app.exitApp();
} else {
history.go(-1);
}
});
这里有一个 meteor 包也可以为你做这件事:
https://github.com/remcoder/fix-back-button-android
编辑:
我实际上继续并分叉了那个 repo,修复了 cordova 插件依赖性问题,并使用了 Kelly 的代码而不是原始 repo 中的代码,在这里找到我的 fork:
https://github.com/tripflex/fix-back-button-android
或使用 Meteor 安装:
meteor add tripflex:fix-back-button-android
我可以确认它工作正常,当通过下面描述的 GitHub 方法添加时,并使用 Kelly 的答案检测根页面(不要使用 GitHub 存储库中的示例)。
我也不是流星专家(但我是一名全职开发人员),但是根据 Kelly 的回答,我会在 Meteor Startup 中移动 isCordova
的支票(我敢肯定随着您的应用程序的进步,您将拥有更多的启动代码)
Meteor.startup(function(){
// Mobile specific code
if(Meteor.isCordova) {
window.onpopstate = function () {
if (history.state && history.state.initial === true) {
navigator.app.exitApp();
//or to suspend meteor add cordova:org.android.tools.suspend@0.1.2
//window.plugins.Suspend.suspendApp();
}
};
}
// Any other startup code below here
});
编辑:如果您决定要使用 cordova 挂起包,它不会像 Meteor 中的大多数 cordova 插件那样工作,因为 npm 中不存在该插件,所以这行不通:
meteor add cordova:org.android.tools.suspend@0.1.2
您必须使用 GitHub 存储库像这样添加它:
meteor add cordova:org.android.tools.suspend@https://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9
我已经 uilt 和 android 的 meteor 和 phonegap/cordova 应用程序: https://play.google.com/store/apps/details?id=com.idqkd3gsl4qt51152xgy
它工作得很好(特别是考虑到我不是真正的程序员),但我一直在努力解决的一个用户体验问题是,当我按下 [=40 上的后退按钮时,应用程序不会始终关闭=].偶尔它会在第一次按下时运行,但大多数时候我必须连续卡住它 5-6 次才能关闭应用程序。
我正在使用最新的 iron-router。我正在使用的其余软件包似乎与这个问题没有特别相关,但它们如下以防万一:
标准应用程序包 咖啡脚本 natestrauser:font-真棒@4.1.0 帐户密码 aldeed:autoform aldeed:collection2 nemo64:bootstrap 较少的 alanning:roles joshowens:accounts-条目 mrt:accounts-admin-ui-bootstrap-3 mizzao:jquery-ui iron:router sacha:spin raix:push mizzao:bootboxjs meteorhacks:kadira bootstrap3-媒体查询
repo 可以在这里看到:https://github.com/The3vilMonkey/BrewsOnTap
除了似乎在启动时 cordova 应用程序发生了某种重定向之外,我无法指定此问题的确切原因。我发现的最佳解决方案是捕获 popstate 事件,当您回到开始时退出或暂停应用程序。我更喜欢这种方式,当用户返回应用程序时它不会从头开始它的生命周期.
if(Meteor.isCordova){
Meteor.startup(function(){
window.onpopstate = function () {
if (history.state && history.state.initial === true){
navigator.app.exitApp();
//or to suspend meteor add cordova:org.android.tools.suspend@0.1.2
//window.plugins.Suspend.suspendApp();
}
};
});
}
我第一次使用它时得到的一个警告是,如果用户未登录,则重定向到登录页面。如果您在执行此操作的应用程序中使用此方法,您将需要切换到呈现登录页面而不是重定向,否则您的应用将 exit/suspend 立即。
虽然 Kelly 的回答确实有效,但对于我的特定情况,它最终在功能上并不正确。关于该解决方案需要注意的重要一点是,一旦后退按钮使您 return 返回初始页面,它就会退出,而不是当您在初始页面上按下后退按钮时。
最终我使用了 cordova 的后退按钮侦听器来查看是否按下了后退按钮:
if Meteor.isCordova
Meteor.startup ->
document.addEventListener("backbutton", ->
if document.location.pathname is "/"
navigator.app.exitApp()
else
history.go(-1)
然后,如果我在我的应用程序的根目录下,我 exit/suspend,否则我只是返回历史记录。
使用后退按钮事件侦听器似乎确实覆盖了它的默认功能,因此在我的情况下调用 history.go(-1) 是必要的。
另请注意,如果您想要一个真实的历史记录,该历史记录可以在存在于初始入口点之前通过历史记录(可能多次击中应用程序的根目录)返回,则此解决方案将会中断。结合我的回答和凯利的回答可能会奏效。我发现虽然这可能是网站的预期行为,但对于移动应用程序而言并非如此。
就我而言,我混合了前面两个答案,因此效果很好。
document.addEventListener("backbutton", function(){
if (history.state && history.state.initial === true) {
navigator.app.exitApp();
} else {
history.go(-1);
}
});
这里有一个 meteor 包也可以为你做这件事:
https://github.com/remcoder/fix-back-button-android
编辑: 我实际上继续并分叉了那个 repo,修复了 cordova 插件依赖性问题,并使用了 Kelly 的代码而不是原始 repo 中的代码,在这里找到我的 fork: https://github.com/tripflex/fix-back-button-android
或使用 Meteor 安装:
meteor add tripflex:fix-back-button-android
我可以确认它工作正常,当通过下面描述的 GitHub 方法添加时,并使用 Kelly 的答案检测根页面(不要使用 GitHub 存储库中的示例)。
我也不是流星专家(但我是一名全职开发人员),但是根据 Kelly 的回答,我会在 Meteor Startup 中移动 isCordova
的支票(我敢肯定随着您的应用程序的进步,您将拥有更多的启动代码)
Meteor.startup(function(){
// Mobile specific code
if(Meteor.isCordova) {
window.onpopstate = function () {
if (history.state && history.state.initial === true) {
navigator.app.exitApp();
//or to suspend meteor add cordova:org.android.tools.suspend@0.1.2
//window.plugins.Suspend.suspendApp();
}
};
}
// Any other startup code below here
});
编辑:如果您决定要使用 cordova 挂起包,它不会像 Meteor 中的大多数 cordova 插件那样工作,因为 npm 中不存在该插件,所以这行不通:
meteor add cordova:org.android.tools.suspend@0.1.2
您必须使用 GitHub 存储库像这样添加它:
meteor add cordova:org.android.tools.suspend@https://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9