2012-01-11 4 views
2

jQuery Mobile(jQM)を使用するPhoneGapアプリケーションで作業しています。このアプリケーションには、ユーザーの認証が必要な領域があります。だから私はjQMのpagebeforechangeを使って、ユーザが要求したページを見る前に認証する必要があるかどうかを判断しています。もしそうなら、私はそれらをログインページに送ります。pagebeforechangeイベントでリンク先を変更し、履歴から外しますか?

ログインページをjQMの履歴トラッキングから保護したいと考えています。つまり、ユーザーにログインページが表示されても、「キャンセル」を押すと決定すると、アプリケーションは前のページに戻り、ではなく、に履歴の「次のページ」があります。 「前のページ」は履歴スタックの一番上にあります。私はこれを行うとき、私は結局、

$loginCancelButton.bind('click', function() { 
    var prevPage = $.mobile.urlHistory.getPrev(); 

    if (typeof prevPage !== 'undefined') { 
    $.mobile.changePage(prevPage.url, { 
     changeHash: false, 
     reverse: true, 
     transition: "pop" 
    }); 
    } 
}); 

をしかし:私はやっている私のログインページのキャンセルボタンの

$(document).bind('pagebeforechange', function(e, data) { 
    if (typeof data.toPage !== 'string') { 
    return; 
    } 

    if (data.toPage.match(/someRestrictedPage/)) { 
    data.options.transition = "pop"; 
    data.options.changeHash = false; 
    data.toPage = "myLogin.html"; 
    } 
}); 

:私は、ログインページのリダイレクトを処理していますどのようにここで

です私はページの茶を傍受管理するにはどうすればよい

[ {"index"}, {"login"}, {"index"} ] 

$.mobile.urlHistory.stack 3との要素を持ちます必要に応じてログインフォームにリダイレクトしますが、「無効な」ナビゲーション履歴は作成されません。

+0

data.deferred.resolve('#SignIn', data.options); 

e.preventDefault(); 

を除去することによって、私もその中に興味があると思います。 –

+0

@tommydはあなたの希望を手に入れません。この質問はゼロの愛を得る。 –

+0

ほとんど同じ問題になっています – frequent

答えて

1

the jquery docsを見ると、pagebeforeloadイベントを停止する必要があることが記述されています。 data.deferred(解決または拒否)を呼び出します。私のためにうまく働いた

$(document).bind('pagebeforechange', function(e, data) { 
if (typeof data.toPage !== 'string') { 
    return; 
} 

if (data.toPage.match(/ your regex /gi)) 
{ 
    if (!check_login()) 
    { 
     e.preventDefault(); 
     data.options.transition = "pop"; 
     data.options.changeHash = false; 
     data.toPage = "#SignIn"; 
     $.mobile.changePage("#SignIn"); 
    } 
    //data.deferred.resolve('#SignIn', data.options); 
} 
}); 

:最初の問題の解決策のようなものかもしれない

$(document).bind('pagebeforechange', function(e, data) { 
    if (typeof data.toPage !== 'string') { 
     return; 
    } 

    if (data.toPage.match(/someRestrictedPage/)) { 
     e.preventDefault() 
     data.options.transition = "pop"; 
     data.options.changeHash = false; 
     data.toPage = "myLogin.html"; 
    } 
    data.deferred.resolve(/* url */, data.options) 
}); 
+0

ドキュメントから: "このイベントにバインドされたコールバックは、イベントでpreventDefault()を呼び出して、ロード要求を処理していることを示すことができます。私はページの読み込み要求を処理していません。私は単にどのページが読み込まれるかを変更しています。 –

0

は、それを変更してみてください。

+0

あなたのソリューションは何ですか?あなたがしたことを実際に説明するのはどうですか? –

0

VeXiiのソリューションが私のために働いていたようです。単に... 1.3モバイルjqueryの上

$(document).bind('pagebeforechange', function(e, data) { 
    if (typeof data.toPage !== 'string') { 
     return; 
    } 

    if (data.toPage.match(/index/)) { 
     data.options.transition = "pop"; 
     data.options.changeHash = false; 
     data.toPage = "#login"; 
    } 
}); 
+0

私はこれと何をするべきか分かりません。質問は2歳で、私はもはやそれを生成したプロジェクトに取り組んでいません。だから私はそれが私が持っていた問題を解決することを確認することはできません。したがって、答えとして受け入れるべきかどうかは分かりません。私が質問をコミュニティのwikiにすることができたら、私はそうするでしょう。 –

関連する問題