編集:アンカー要素でプログラム的にクリックイベントを実行すること、またはwindow.openを使用することについてのコメントに応えて、ポップアップブロッカーのためにこれらを使用できません。ユーザーによるアンカーの元のmouseclickイベントがコースを完了することを許可する必要があります。その結果、新しいウィンドウのブロックが解除されます。
ここでの最善の妥協案は、同期ajaxリクエストを実行し、リクエストが完了するまでユーザーにスピナーgifを提示することです。
編集:フィドルhttp://jsfiddle.net/cXdJg/35/
プレーヤーページへのリンクがあるWebエディターの場合を考えてみましょう。
hrefがプレーヤーに設定されているリンクをクリックすると、エディターはコンテンツがサーバーに保存されているかどうかを確認します。
はいの場合:何もしません。
そうでない場合:コンテンツを保存するためにajaxリクエストを実行します。ajax呼び出しの終了時:アンカー要素のクリックイベントの続行を許可します。新しいブラウザウィンドウでプレーヤーページのリクエストが実行されます。
ブラウザをフリーズせずに、アンカー要素のクリックイベントをインターセプトする関数の終了をajax呼び出しが終了するまで遅らせるにはどうすればよいですか?http://www.devcheater.com/#Conclusionを参照してください
http://ajaxpatterns.org/Submission_Throttlingを確認しましたが、ここでその例を適用する方法がわかりません。
コード形式のアイデアの例:
$('a.play').click(function){
if(!isSaved){
save(); //saves the content and **sets isSaved to true**
}
while (!isSaved){
//burn time until isSaved, but don't freeze the browser!
}
//allow the event handler to end, after which the click on anchor element will
// load the player page in new window.
}