如何在phonegap/cordova中检测Android后退按钮
我目前正在使用cordova 3.7.1。在我的应用程序中,我无法在jquery脚本中检测到硬件后退按钮。我试着这样做:如何在phonegap/cordova中检测Android后退按钮,android,jquery,cordova,jquery-mobile,Android,Jquery,Cordova,Jquery Mobile,我目前正在使用cordova 3.7.1。在我的应用程序中,我无法在jquery脚本中检测到硬件后退按钮。我试着这样做: $(文档).ready(函数(){ //注册后退按钮 document.addEventListener(“backbutton”,onBackKeyDown,false);}) 函数onBackKeyDown(e){ 警报(“按下后退按钮”);//如果按下android后退按钮,则发出警报 } 但这是行不通的。我已经尝试了所有的可能性 我还尝试使用 appView.getU
$(文档).ready(函数(){
//注册后退按钮
document.addEventListener(“backbutton”,onBackKeyDown,false);})代码>
函数onBackKeyDown(e){
警报(“按下后退按钮”);//如果按下android后退按钮,则发出警报
}
但这是行不通的。我已经尝试了所有的可能性
我还尝试使用
appView.getUrl()代码>
但这不会返回div的url
如果我有一个div as#page2,它不会返回url
它只会回来。它不会回来了
我也在使用jquerymobile
在本机或Jquery端是否有处理android/硬件后退按钮的替代方案???有两种解决方案:
1) 您需要在索引html文件的head部分的script标记中包含cordova.js,以使事件和插件正常工作
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
您可能无法在文件夹中看到此文件,但phonegap | cordova命令在移动设备上运行时会生成此文件
2) 将代码修改为
使用特定于移动设备的事件以确保应用程序正常运行 阅读文档,您已经
您必须侦听deviceready事件,而不是文档就绪
<!DOCTYPE html>
<html>
<head>
<title>Back Button Example</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for device API libraries to load
//
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// device APIs are available
//
function onDeviceReady() {
// Register the event listener
document.addEventListener("backbutton", onBackKeyDown, false);
}
// Handle the back button
//
function onBackKeyDown() {
}
</script>
</head>
<body onload="onLoad()">
</body>
</html>
后退按钮示例
//等待加载设备API库
//
函数onLoad(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
}
//设备API可用
//
函数ondevicerady(){
//注册事件侦听器
document.addEventListener(“backbutton”,onBackKeyDown,false);
}
//按后退按钮
//
函数onBackKeyDown(){
}
以下内容在我们部署到cordova和web的应用程序中得到了应用,效果非常好
需要窗口。_cordovanite=true
如果在cordova中
我在这里留下了处理代码的按钮作为示例(请参见“//如果打开则关闭菜单”和其他注释),您需要用代码替换它们
把这个放在某个地方:
let bNH, bakNavHandler = bNH = {
warningOpen: false,
init: function(){
if (window._cordovaNative)
document.addEventListener('backbutton', this.onback, false);
else {
if (!window.performance || performance.navigation.type != 1)
this.preventDefault();
window.onpopstate = this.onback;
}
},
preventDefault: function(e){
window._cordovaNative ?
e.preventDefault() :
window.history.pushState(null, '', window.location.href);
},
onback: function(e){
// close menu if open
if ($('#ekapp_menu_div').css('margin-right') == '-2px'){
bNH.preventDefault(e)
_that.hideMenuDiv();
}
// close modal if open
else if (!bNH.warningOpen && $('#ekapp_modal:visible')[0]){
bNH.preventDefault(e)
_that.closeModal();
}
// prev screen if history
else if (_that.history.length > 1) {
bNH.preventDefault(e)
_that.previousScreen();
}
// show close app warning
else if (!bNH.warningOpen) {
if (window._cordovaNative)
bNH.preventDefault(e);
_that.openModal('Tap back button again to exit app!');
bNH.warningOpen = true;
$('#ekapp_modal_buttons .ekapp_cancel_btn').one('click', function(){
bNH.warningOpen = false;
if (!window._cordovaNative)
bNH.preventDefault();
});
}
}
};
然后在deviceready(cordova)或doc ready(web)初始化函数中执行以下操作:
bakNavHandler.init();
始终更喜欢使用移动本机事件。在devicerady
event中绑定所有移动事件是一种很好的做法。代码不起作用,我尝试了类似的方法:document.addEventListener('deviceready',函数(事件){document.addEventListener('backbutton',函数(e){//返回按钮事件警报时执行的逻辑(“返回按下”);},false)如果按下后退按钮,则显示警报。这是我的代码片段:$(document).ready(函数(){document.addEventListener('backbutton',函数(e){//在后退按钮事件警报上执行的逻辑(“按下后退按钮”);},false);});
我正在本机端本身处理后退按钮事件。我没有使用OnBackKeyDown()。