web-dev-qa-db-ja.com

Firefoxのリロード確認の防止

編集可能なテーブルに特定のレコードを表示しています。ユーザーがレコードの編集中にテーブルをリロードしようとすると、ポップアップが保存されていないデータについてレコードに警告を表示します。

function cancelProcess()
{
    if(noEditedRecords !=0)//number of edited records in the table
    {
        var processConfirmation = confirm("You've Edited "+ noEditedRecords +" Records. Are You sure to undo the Changes made?");

        if (processConfirmation ==true){
            window.onbeforeunload = null;
            window.location.reload();
        }
    }
}

OKをクリックしてページをリロードすると、Firefoxは

このページを表示するには、Firefoxは、以前に実行されたアクション(検索や注文確認など)を繰り返す情報を送信する必要があります。

また、Chromeで同じページを開くと、そのようなプロンプトは表示されません。

window.onbeforeunload = null;を設定してこれを回避しようとしましたが、まだプロンプトウィンドウが表示されています。

また、Firefoxの設定を変更して試してみました。

browser.sessionstore.postdata

から1に変更 Mozillaサポートページで提案されているとおり。

しかし、何もうまくいきませんでした。プロンプトを防ぐにはどうすればよいですか?

16
Emmi

使用する

window.location=window.location;

の代わりに

location.reload();

私のために働きます。

36
Ricardo Huertas

私はこれを解決し、[〜#〜] post [〜#〜]の代わりに[〜#〜] get [〜#〜]としてのみデータを送信しました

すべてのニーズに合うわけではありませんが、うまくいきます。

location.reload();も使用していました

1
Mikeys4u
window.opener.location.href = window.opener.location;

私は決定を見つけました ここ

(Firefox 32およびChrome 38で正常にテストされました。)

1
Seva Bityukov

このプロンプトを回避する方法は、ユーザーがPOST結果ページを再ロードしようとしている状況を作成しないことです。

0
Boris Zbarsky

これを試して。

setTimeout (function () {
    window.location.reload();
},0);
0
CookieMonster

動作は正しいです。 w3schoolsによると、reloadにはデフォルトでfalseであるパラメーターforceGetがあり、その結果POST submitがある場合、ブラウザーはPOSTデータであり、そのため、確認が必要です。Firefoxはこれを正しく実行し、google chromeは、デフォルトのtrueのように動作しますforceGet

http://www.w3schools.com/jsref/met_loc_reload.asp

http://www.google.com#のようなアンカーURLを使用している場合、_window.location=window.location_または_window.location=window.location.href_(またはこれの他のバリエーション)はほとんどの場合機能しますtest は、このメソッドでは更新されません。ブラウザは、すでにgoogle.comにアクセスしていて、#testを追加してURLを変更する場合とまったく同じことを行います。ブラウザーは、testという名前のページでアンカータグを見つけようとし、ブラウザーを更新することなく、そのタグまでスクロールします。

このケースと私が遭遇した他のケースで機能する解決策はwindow.location.reload(true);です

お役に立てれば、

アレクサンドルコソイ

0
Alexandru Cosoi