web-dev-qa-db-fra.com

Comment puis-je obtenir l'URL de destination pour l'événement onbeforeunload?

J'ai cherché pendant des heures, mais je n'ai pas trouvé de solution.

window.onbeforeunload = warn;

Cela ne fonctionne pas:

function warn (e) 
{ 
   var destination = e.href;
   alert(destination );
}

D'accord, donc pour effacer les choses. Si l'utilisateur clique sur un lien sur la page elle-même, c'est facile, car vous pouvez ajouter un gestionnaire d'événements à tous les liens sur l'événement click, mais. Je veux attraper l'adresse, ce que l'utilisateur tape dans la boîte URL du navigateur.

50
misnyo

Parce que ça ne peut pas être fait. Le nouvel emplacement est une information privée/sensible. Personne ne veut que vous sachiez quels sites ils visitent lorsqu'ils quittent votre site.

64

Si vous voulez simplement voir quelle destination de lien, vous pouvez utiliser:

document.activeElement.href 

Mais obtenir la destination de la ligne d'adresse n'est pas possible.

J'ai entendu parler de solutions où ils déclenchent un événement si la souris se déplace vers la ligne d'adresse (pour avertir l'utilisateur qu'il existe des processus inachevés qui n'ont pas été traités), mais ce genre de piratage que je ne ferais jamais.

21
Espen Schulstad

La réponse de Kaze est une approche intéressante, mais regarder le focus de l'élément lorsque la page est éloignée n'est pas vraiment fiable. En partie parce qu'il y a un délai entre le clic du lien et la navigation loin de la page (pendant laquelle l'utilisateur peut déplacer le focus vers un autre élément, mais aussi parce qu'un lien peut être focalisé (par exemple, par contrôle du clavier, ou mousedown-without -click) sans être utilisé pour s'éloigner de la page. Donc, si vous concentrez un lien puis fermez la fenêtre, vous penserez que vous suivez le lien.

Le piégeage onclick pour chaque lien de la page (plus onsubmit sur chaque formulaire) est légèrement plus fiable, mais peut toujours être dupé en raison du retard. Par exemple, vous cliquez sur un lien, mais avant que la nouvelle page ne commence à se charger, appuyez sur le bouton de retour (ou appuyez sur Échap). Encore une fois, si vous fermez la fenêtre, il pense que vous suivez le lien.

Je veux attraper l'adresse, ce que l'utilisateur tape dans la boîte URL du navigateur.

Il n'y a aucun moyen qui se produira jamais. C'est une intimité évidente non-non.

18
bobince