-1

ajax 呼び出しの読み込み中に誰かが [戻る] ボタンを押すと、コード エラーがポップアップ表示されます。呼び出しが正常に戻るまで無効にする方法はありますか?

例:

$.ajax({
// Disable back button
url: "test.html",
context: document.body

}).done(function() {
// Enable back button
$(this).addClass("done");
});

ブラウザの機能をハイジャックするのは悪いことだとわかっていますが、プロジェクトの所有者ではないので、ここで選択することはできません。また、ajax が機能している間は、数秒間の一時的なものです。私はすでに検索しましたが、このシナリオに特に役立つものは何も思いつきませんでした。

4

3 に答える 3

2

ユーザーがWebBrowserで戻るボタンを使用するのを防ぐことはできませんが、おそらくこのコードを使用して、ユーザーに待機を知らせることができます.(そして、ユーザーが待機するなど) :)

例:

window.onbeforeunload = function(){
     return "Please wait until page load is done?";
}

=> Chrome 26+でテストされたコード

たぶんこれが役立つ

編集:

「ホップ」が言及したことに対抗するために、ajax 呼び出しを開始し、ajax 呼び出しの終了後に関数を削除するときに、このイベント関数を設定できますが、これは詳細の一部にすぎません。

例 2:

 ...
 function setPreventLeavingPage(){
    window.onbeforeunload = function(){
         return "Please wait until page load is done?";
    }
 }

 function removePreventLeavingPage(){
   window.onbeforeunload = null;
 }
 ...

 $.ajax({
    url: "test.html",
    beforeSend: function() {
      setPreventLeavingPage();
    },
    context: document.body
    }).done(function() {
       // do some stuff
       ...
       removePreventLeavingPage();
    });

=> Chrome 26+でテストされたコード

于 2013-04-11T18:28:00.427 に答える
2

ブラウザーの [戻る] ボタン (さらに言えば、任意のボタン) を無効にすることはできません。想像できますか?スパムのポップアップには、運動会があります!

とにかく、あなたができる最善のことは使用することですonbeforeunload(Operaがサポートしていないことを知っているように、これは一部のブラウザでのみ機能します)。AJAX リクエストがある場合は、「Are you sure you want to leave?」をスローできます。メッセージ。

例:

$(document).ajaxStart(function(){
    $(document.body).addClass('running');
});
$(document).ajaxStop(function(){
    $(document.body).removeClass('running');
});

$(window).on('beforeunload', function(){
    if($(document.body).hasClass('running')){
        return "There is still a pending AJAX request.  Are you sure you want to leave?";
    }
});

$.ajax({
    url: "test.html",
    context: document.body
}).done(function() {
    $(this).addClass("done");
});
于 2013-04-11T18:33:02.180 に答える
-1

done 関数にクラスを追加するときに、「this」変数がどのコンテキストにあるかを確認したい場合があります。私の推測では、ボタンではなく、完了した機能のウィンドウを指していると思います。

.done(function(){console.log(this);}); 
于 2013-04-11T18:23:29.753 に答える