124 votes

Empêcher toute forme de rafraîchissement de la page à l'aide de jQuery/Javascript

Une fois que l'utilisateur est sur ma page, je ne veux pas qu'il rafraîchisse la page.

  1. À tout moment, l'utilisateur appuie sur F5 ou le bouton d'actualisation en haut de la page. Il devrait recevoir une alerte disant

    Vous ne pouvez pas actualiser la page.

  2. De même, si l'utilisateur ouvre un nouvel onglet et tente d'accéder à la même URL dans l'onglet précédent, il devrait recevoir une alerte.

    Vous ne pouvez pas ouvrir la même page dans 2 onglets

Comment puis-je faire cela en utilisant JavaScript ou jQuery ? Le premier point est très important.

4voto

RockLegend Points 457

Le problème n°2 peut maintenant être résolu en utilisant BroadcastAPI .

Pour l'instant, il n'est disponible que dans Chrome, Firefox et Opera.

var bc = new BroadcastChannel('test_channel');

bc.onmessage = function (ev) { 
    if(ev.data && ev.data.url===window.location.href){
       alert('You cannot open the same page in 2 tabs');
    }
}

bc.postMessage(window.location.href);

2voto

seo Points 177

Le numéro 2 est possible en utilisant une implémentation de socket (comme websocket, socket.io, etc.) avec un heartbeat personnalisé pour chaque session dans laquelle l'utilisateur est engagé. Si un utilisateur tente d'ouvrir une autre fenêtre, un gestionnaire javascript vérifie auprès du serveur si c'est correct, puis répond par un message d'erreur.

Cependant, une meilleure solution est de synchroniser les deux sessions si possible comme dans google docs.

0voto

EzWinz Points 1

Ce n'est pas conseillé, mais si vous voulez empêcher complètement l'utilisateur de rafraîchir la page de quelque manière que ce soit, vous pouvez utiliser :

setInterval(function(){
  window.location.reload();
  window.stop();
},100)

Il empêche non seulement l'actualisation, mais aussi la navigation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X