我目前正在使用cordova 3.7.1。在我的应用程序中,我无法在jquery脚本中检测到硬件后退按钮。我尝试这样:
$(document).ready(function() {
//registering the back button
document.addEventListener("backbutton", onBackKeyDown, false); });
function onBackKeyDown(e) {
alert("back button pressed");//alert if the android back button is pressed
}
但这不起作用。我已经尝试了所有可能性
我还尝试使用
获取MainActivity.java中的当前URL appView.getUrl();
但是这不会返回div的url 如果我有一个div作为#page2它没有返回url。
它只返回http://sas.cer.org/index.html。它没有返回http://sas.cer.org/index.html#page2
我也使用jquery mobile。
在Native或Jquery端处理android / hardware后退按钮是否有其他选择?
答案 0 :(得分:3)
有两种解决方案:
1)你需要在索引html文件的head部分的script标签中包含cordova.js,以使事件和插件工作。
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
您可能无法在文件夹中看到此文件,但看到了手机屏幕cordova命令在移动设备上运行时构建它。
2)将您的代码修改为given here. 使用特定于移动设备的活动来确保您的应用正常运行。
答案 1 :(得分:1)
以下内容在我们部署到cordova和Web的应用程序中得到了很好的运用。
如果是科尔多瓦,则需要window._cordovaNative = true
。
我将按钮处理代码留在其中作为示例(请参阅“ // close menu if open
”和其他注释),您需要将其替换为代码。
将此放置在某处:
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();
});
}
}
};
然后在您的设备就绪(cordova)或doc ready(web)初始化函数中执行以下操作:
bakNavHandler.init();
答案 2 :(得分:0)
阅读文档,您有a full example there
您必须侦听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>