2009-11-06 8 views
37

J'ai cherché des heures, mais je n'ai pas trouvé de solution pour cela.Comment puis-je obtenir l'URL de destination de l'événement onbeforeunload?

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 eventhandler à tous les liens onclick event, mais. Je veux attraper l'adresse, ce que l'utilisateur tape dans la boîte d'URL du navigateur.

+0

Je travaille sur les sites de traitement des données et avant qu'un utilisateur quitte la page, je vous assurer que toutes les données est conforme aux exigences. L'événement onbeforeunload est utile, mais lourd à cause de la façon dont les navigateurs le gèrent. Je ne peux pas empêcher l'utilisateur de quitter la page, mais il serait bon de savoir où ils vont. En l'occurrence, dans mon cas, je le sais car c'est une redirection générée par un site, donc je peux définir une variable de session. –

Répondre

55

Parce qu'il ne peut pas être fait. Le nouvel emplacement est privé/informations sensibles. Personne ne veut que vous sachiez quels sites ils visitent lorsqu'ils quittent votre site.

+2

Je pense que vous avez eu la question fausse, pourquoi utiliseriez-vous onbeforeonload si vous allez à une page sur votre propre site? Ça n'a aucun sens. Misnyo, pouvez-vous clarifier ce que vous voulez exactement? –

+0

La réponse de @bobince ci-dessous, est intéressante: http://stackoverflow.com/a/1687028/538387 – Tohid

+0

@MichelvanEngelen - b/c peut-être que vous voulez déclencher un écran de chargement CSS pour faire savoir à l'utilisateur qu'il se prépare à naviguer quelque part, qu'ils ont en effet cliqué sur un lien et que quelque chose se passe (rend le site plus réactif, surtout quand il faut un certain temps pour naviguer vers une autre page) – jbyrd

18

La réponse de Kaze est une approche intéressante, mais en regardant la mise au point 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 de lien et la navigation loin de la page (pendant ce temps l'utilisateur peut déplacer le focus sur un autre élément, mais aussi parce qu'un lien peut être focalisé (par exemple par le clavier ou par souris). -Click) sans être utilisé pour naviguer loin de la page.Si vous avez concentré un lien puis fermé la fenêtre, il pensait que vous suiviez le lien

Trapping onclick pour chaque lien sur la page (plus onsubmit sur chaque formulaire) est légèrement plus fiable, mais peut encore être trompé en raison du retard.Par exemple, vous cliquez sur un lien, mais avant que la nouvelle page commence le chargement appuyez sur le bouton de retour (ou appuyez sur Échap). fenêtre, il pense que vous suivez le lien.

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

Il n'y a aucun moyen qui arrivera jamais. C'est une vie privée évidente non-non.

+3

Vous avez raison, j'ai enlevé ma réponse. –

+12

Mais pourquoi avez-vous fait cela. Si votre réponse n'est pas tout à fait correcte, ne vous inquiétez pas, les gens ont la possibilité de le juger avec leur vote. Mais cela peut toujours être utile à d'autres personnes. J'aurais aimé voir votre approche du «dernier foyer». – cprcrack

+0

D'accord - @KazenoKoe s'il vous plaît ajouter votre réponse! –

16

Si vous voulez juste voir ce lien destination, vous pouvez utiliser:

document.activeElement.href 

Mais obtenir la destination de la ligne d'adresse est impossible. J'ai entendu parler de solutions où ils déclenchent un événement si la souris se déplace jusqu'à 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 je le ferais jamais fait.