2012-10-09 8 views
12

DrupalサイトとやりとりするPhonegapを使用してAndroidアプリケーションを開発しています。私はAndroidの「戻る」ボタンを再割り当てして、ユーザーにDrupalサーバーからのログオフを促すように指示しましたが、私はログインページで無効にしたいだけです(明らかな理由により)。私はそれを動作させることができますが、ユーザがログアウトしてからログインページで一度だけ、ボタンはログオフボタンとして再度割り当てられます。これまでのコードは次のとおりです。1ページでAndroid Backボタンを無効にし、1ページおきに終了ボタンに変更するには

<head> 
     <script> 
     /* Wait until device is ready to re-assign Back button */ 
     document.addEventListener("deviceready", onDeviceReady, false); 
     function onDeviceReady() { 
      document.addEventListener("backbutton", onBackKeyPress, false); 
     } 
     function onBackKeyPress() { 
      /* If the current page is the login page, disable the button completely (aka do nothing) */ 
      if ($.mobile.activePage.attr('id') == 'login_page') { 
      } 

      /* Else, execute log off code */ 
      else { 
       if (confirm("Are you sure you want to logout?")) { 
        /* Here is where my AJAX code for logging off goes */ 
       } 
       else { 
        return false; 
       } 
      } 
     } 
     </script> 
</head> 

問題は「戻る」ボタンが再割り当てされないことです。ユーザーがログアウトしてログインページに戻ると、上記のコードを再実行する方法がわかりません。

誰かがこれに対する解決策を提供したいと願っているなら、私は非常に感謝します!

答えて

4

これを試してみてください:

document.addEventListener("backbutton", function(e){ 
    if($.mobile.activePage.is('#login_page')){ 
     e.preventDefault(); 
    } 
    else { 
     if (confirm("Are you sure you want to logout?")) { 
      /* Here is where my AJAX code for logging off goes */ 
     } 
     else { 
      return false; 
     } 
    } 
}, false); 
+0

は私のプロジェクトでこれを行うには、一度だけ実行されているように見える、それがあれば文に入るので、BAのデフォルトの実行を防ぎますckのボタンと葉、その後、戻るボタンは、アプリケーション上の任意のページで機能していません –

19

devicereadyが重要です。使用されていない場合、バックボタンをブロックすることがあります。 多くの場合、デバッグでは動作しません。

document.addEventListener("deviceready", onDeviceReady, false); 
    function onDeviceReady() { 
     document.addEventListener("backbutton", function (e) { 
      e.preventDefault(); 
     }, false); 
} 

EDIT 2013年11月3日 よくある間違いは開発がデスクトップ上で実行され、コルドバスクリプトが除外されていることです。 モバイル版のコードバスクリプトを含めることを忘れてしまった。

+0

私のために働くPhoneGap 2.7 – JamesRLamar

+0

編集ありがとう。それも私の場合だった – s3v3n

2
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.addEventListener("backbutton", function (e) { 
     e.preventDefault(); 
    }, false); 
} 
0

あなたは準備ができて、デバイスにボタンアクションをバックオーバーライドする必要があり... は、ここでは完全な作業例「のindex.html」

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Back Button</title> 
    <link rel="stylesheet" type="tex`enter code here`t/css" href="style.css"> 
    <script> 
     function getTitle() { 
      document.getElementById("ct").innerHTML = "DEMO: " + document.title; 
     } 
    </script> 
    <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); 
     getTitle(); 
    } 
    // device APIs are available 
    // 
    function onDeviceReady() { 
     // Register the event listener 
     document.addEventListener("backbutton", onBackKeyDown, false); 
    } 
    // Handle the back button 
    // 
    function onBackKeyDown() { 
     alert('Backbutton key pressed'); 
     console.log('Backbutton key pressed'); 
    } 
    </script> 
    </head> 
    <body onload="onLoad()"> 
    <ul id="nav"> 
     <li><a href="index.html">&larr; Back</a></li> 
     <li><a href="#" id="ct" onclick="location.reload();"></a></li> 
    </ul> 
    </body> 
</html> 

私はこのコードを使用し、戻るボタンが最終的に上書きされています。 ...

参考 - >https://github.com/amirudin/PhoneGapPluginDemo/blob/master/www/evt-backbutton.html

関連する問題