15

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

   <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

4 に答える 4

24

devicereadyは重要です。使用しないと、[戻る] ボタンがブロックされる場合とブロックされない場合があります。多くの場合、デバッグでは機能しますが、本番環境では機能しません。

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

EDIT 2013-11-03 よくある間違いは、開発がデスクトップで実行され、cordova スクリプトが除外されていることです。次に、モバイル バージョン用の cordova スクリプトを含めるのを忘れます。

于 2013-08-27T12:29:07.920 に答える
5

これを試して:

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);
于 2012-12-26T15:56:27.080 に答える
3
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    document.addEventListener("backbutton", function (e) {
        e.preventDefault();
    }, false );
}
于 2013-12-13T12:45:48.813 に答える
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

于 2016-04-18T14:24:15.630 に答える