web-dev-qa-db-fra.com

Empêcher la confirmation de rechargement de Firefox

J'affiche certains enregistrements dans une table éditable. Lorsque l'utilisateur tente de recharger la table lors de la modification d'un enregistrement, une fenêtre contextuelle l'avertit à propos des données non sauvegardées.

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();
        }
    }
}

Lorsqu'il clique sur OK pour recharger la page, Firefox affiche l'invite suivante: 

Pour afficher cette page, Firefox doit envoyer des informations qui répètent toute action (telle qu'une recherche ou une confirmation de commande) effectuée précédemment.

Et lorsque vous ouvrez la même page dans Chrome, aucune invite de ce type n'apparaît.

J'ai essayé d'éviter cela en définissant window.onbeforeunload = null;, mais la fenêtre Invite y apparaît toujours.

J'ai aussi essayé en modifiant la configuration de Firefox:

browser.sessionstore.postdata

Changé de 0 à 1 comme suggéré dans la page de support de Mozilla.

Mais rien n'a fonctionné .. Comment puis-je empêcher l'invite?

16
Emmi

En utilisant

window.location=window.location;

Au lieu de 

location.reload();

travaille pour moi.

35
Ricardo Huertas

J'ai résolu ceci et envoyé des données en tant queOBTENIRau lieu dePOST,

Cela ne convient pas à tous les besoins mais ça marche ....

J'utilisais aussi location.reload ();

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

J'ai trouvé la décision ici

(Testé avec Firefox 32 et Chrome 38 avec succès.)

1
Seva Bityukov

Le comportement est correct. Selon w3schools reload a un paramètre forceGet qui est faux par défaut, et si vous avez un POST submit, le navigateur essaiera de le renvoyer POST données, et à ce titre, il a besoin de votre confirmation. Firefox fait cela correctement, et Google Chrome se comporte comme si sa valeur par défaut était true pour forceGet

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

alors que window.location=window.location ou window.location=window.location.href (ou toute autre variante de celui-ci) fonctionne la plupart du temps, lorsque vous utilisez une URL d'ancre telle que http: //www.google.com#test ne sera pas actualisée avec cette méthode. Le navigateur fera exactement la même chose que lorsque vous êtes déjà sur google.com et que vous modifiez l'URL en ajoutant #test. Le navigateur essaiera simplement de localiser la balise d'ancrage dans la page portant le nom test et de la faire défiler sans actualiser votre navigateur. 

La solution qui fonctionne dans ce cas, ainsi que dans tout autre cas que j'ai rencontré serait window.location.reload(true);

J'espère que cela t'aides,

Alexandru Cosoi

1
Alexandru Cosoi

Le moyen d'éviter cette invite est de ne pas créer de situation dans laquelle un utilisateur tente de recharger une page de résultat POST.

0
Boris Zbarsky

Essaye ça.

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