【问题标题】:PhoneGap Back Button exit the ApplicationPhoneGap 后退按钮退出应用程序
【发布时间】:2014-10-28 06:07:39
【问题描述】:

目前我正在使用 PhoneGap (Cordova 2.2)、JQuery 和 Javascript 开发移动应用程序。登陆页面是登录页面。因此,一旦我使用登录凭据进入仪表板页面,当我单击 BACK BUTTON 时,它会返回登录页面,而不是停留在仪表板页面上。我能做些什么???欢迎提出建议。

我试过了,

脚本

<head>
<script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>
<script type="text/javascript" charset="utf-8">

// Call onDeviceReady when Cordova is loaded.
//
// At this point, the document has loaded but cordova-2.2.0.js has not.
// When Cordova is loaded and talking with the native device,
// it will call the event `deviceready`.
//
function onLoad() {
    document.addEventListener("deviceready", onDeviceReady, false);
}

// Cordova is loaded and it is now safe to call Cordova methods
//
function onDeviceReady() {
    // Register the event listener
    document.addEventListener("backbutton", onBackKeyDown, false);
}

// Handle the back button
//
function onBackKeyDown() {
    alert("Back Button Clicked"); //called the alert..checking
}

</script>

HTML

<body onload="onLoad()">
</body>

我的 onDeviceReady 和 onBackKeyDown 函数不起作用/已触发。我错过了什么吗???

【问题讨论】:

  • 基本上你想说你的应用程序应该再次进入仪表板,尽管你当前的页面是仪表板。您所说的行为是保持会话,但使用 phonegap 我们没有这样做。
  • 我们的 HTML 页面中没有返回按钮。但是在移动设备中,我们有一个返回按钮,对吗???现在有什么解决办法????
  • 然后那个后退按钮会直接关闭你的应用程序,当你再次打开应用程序时,它会带你到仪表板。您已在移动设备的本地存储中维护您的凭据。
  • 是jquery移动页面吗?
  • 我们使用过 Cordova-2.2.js 和 jquery.mobile-1.0rc1.min.js

标签: javascript html css cordova


【解决方案1】:

尝试使用 loggin 变量来检查是否登录并在回调函数上做一些事情。

function onBackKeyDown(evt) {
     evt.preventDefault();
     evt.stopPropagation();
     if(loggedin=='yes'){
         //dont do anything or show popup
     }else{
         history.back();
     }
}

需要先绑定eventLinstener,在页面中调用app.initialize()的onLoad OR $(document).ready()方法。

 var app = {
 // Application Constructor
   initialize: function() {
       this.bindEvents();
   },

   // Bind any events that are required on startup. Common events are:
   // 'load', 'deviceready', 'offline', and 'online'.
   bindEvents: function() {

      document.addEventListener('deviceready', this.onDeviceReady, false);

   },

   onDeviceReady: function() {
       document.addEventListener("backbutton", onBackKeyDown, false);
   }
};

【讨论】:

  • 感谢您的回复。但我的情况是什么不是 onBackKeyDown 事件触发/触发???我错过了什么吗???
  • 你的 onDeviceReady() 被调用了吗? (检查警报)
  • 没有 onDeviceReady 和 onBackKeyDown 都没有触发 :(
  • 是的,我写的。在 document.ready() 方法上调用“app.initialize()”方法。这意味着:$(document).ready(function(){app.initialize();});
【解决方案2】:

试试这个

    //after successful  login
        localStorage.setItem('login', 1);
// and your back function callback
        function onBackKeyDown(e) {
        e.preventDefault();
        e.stopPropagation();
        var isLogin = localStorage.getItem('login);
        if (isLogin){
        // stay here
        } else {
        history.back();

        }
           }

【讨论】:

  • 我的问题是 onDeviceReady 和 onBackKeyDown 都没有触发 :( – 我错过了什么吗???
  • 你包含了cordova js 吗?
  • 可能是 cordova 的版本不匹配。你在 root(www) 中有 cordova-2.2.0.js 吗?
  • 你有2.2.0的jar文件吗?使用 2.2.0 的任何具体原因?我们现在有 3.6
  • 没有理由...我们有 2.2.0 的 jar 文件。和 cordova.2.2.0.js 文件。我的问题是,无论我们有什么版本,但为什么 onDeviceReady 和 onBackKeyDown 不起作用/被解雇???