内部リンクページのデフォルト動作を防止するにはどうすればよいですか?jQueryMobileの内部リンクページのデフォルトの動作を防ぐには?
私の目標は、ユーザーが最初に認証せずにページの内容にアクセスするのを防ぐことです。
内部リンクページのデフォルト動作を防止するにはどうすればよいですか?jQueryMobileの内部リンクページのデフォルトの動作を防ぐには?
私の目標は、ユーザーが最初に認証せずにページの内容にアクセスするのを防ぐことです。
最近、私は同じ状況に直面していました。私はjQuery Templatesと一緒にjQuery Mobileを使用していましたが、すべての機密データはWebサービスから送られてきました。
私の解決策は、ユーザーが承認を必要とする任意のページのpagebeforeshow
イベントでコールバックを登録することでした。このコールバック関数では、ユーザーが許可されているかどうかを確認しましたが、これはJSONP Webサービス呼び出しで、データまたは適切なエラーコードが返されます。
次に、ユーザーが承認されている場合、データはjQueryテンプレートでレンダリングされます。それ以外の場合は、$.mobile.changePage()
を使用してユーザーをログインページにリダイレクトします。
ユーザー認証はサーバー側のもので、javascriptで実装することはできません!
私はGETリクエストを自分で送信するのを止めますか?
ログインせずにアクセスできないページは、ユーザーが認証されていない場合はログインページにリダイレクトする必要があります。 javascriptから直接Webサービスを使用する場合は、ユーザーが認証されていない場合はエラーを返す必要があります。
javascriptのページへのアクセスをブロックするのはばかげています。それはどのような行動に依存
...質問に答えるには、[OK]
編集
を、[しかし、私...私は商用製品で前にそれを見てきたことを認めざるを得ません]ページに添付されています。あなたがそれらの行動のためにpageshow
またはpagecreate
でlive
を使用している場合 - あなたは、私はより良い問題を理解するように見えるpagebefore*
イベントとreturn false
別の編集
を使用することができます。あなたはwebservicesを持っており、私は彼らが安全であると断言し、あなたは要求をして「誤解ではない」応答を得ることを望まないので、そうする必要はありません。また、1つのhtml文書で複数のページを使用します。私はあなたが$.mobile.changePage()
余りラッパーを記述する必要があると言うこれらの仮定で
- このような何か:
$.mobile.changePageIf(condition,what,how,bool1,bool2){
if(condition){
$.mobile.changePage(what,how,bool1,bool2);
}else{
//display "log in, dude!" or whatever
}
}
そして、あなた場合はtrueを返す条件を入れて、どこにでもラッパーの代わりに、本来の機能を使用します知っているユーザーがログインしている
私はjavascriptから直接Webサービスを使用しており、ユーザーが認証されていない場合はエラーを返します。なぜJavaScriptのページへのアクセスをブロックするのはばかげているのですか?私の目標は、認証されていないユーザーが他のページを見るのを防ぐことです。 –
「他のページ」は、認証されていないユーザーには配信しないでください。サーバーは代わりに「ログインしてください」というページを送信する必要があります。これはjavascriptとは関係ありません。 – naugtur
私はあなたの視点を理解していますが、WebサービスへのAJAXリクエストでJavaScriptを使用しています。これらのページの中には、ページの読み込み時にサービスを使用する必要がないものがあります。この場合、最善のアプローチは何ですか?その間に、私はpagebeforeshowイベントを使ってみましたが、ページが表示されるのを防ぐことができません。 –
ベータ3では、あなたは「動的ジェクトページ」技術を利用することができ、ここで説明したとおり。
ページが表示されないようにすることはできますか? event.preventDefault()が機能していません。 –
ページの表示の際にコンテンツを非表示にすることはもちろん可能です。私の場合、すべてのページにIDがあるので、このセレクタをコンテンツに使用します:$( "div [id = '" + id + "']").children( 'div [data-role = "content"]') 。隠す(); – sustainablepace
別の質問:どのイベントでpreventDefaultを呼び出しますか? jQuery Mobileのコールバックが起動する前にコールバックが起動する必要があることを認識しておく必要があります。 – sustainablepace