2009-11-06 15 views
37

Ho cercato per ore, ma non sono riuscito a trovare una soluzione per questo.Come posso ottenere l'URL di destinazione per l'evento onbeforeunload?

window.onbeforeunload = warn; 

Questo non funziona:

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

approvazione, in modo per cancellare le cose. Se l'utente fa clic su un link sulla pagina stessa, è facile, perché è possibile aggiungere un eventhandler a tutti gli eventi onclick dei collegamenti, ma. Voglio prendere l'indirizzo, ciò che l'utente digita nella casella url del browser.

+0

Lavoro su siti di elaborazione dati e prima che un utente lasci la pagina mi assicuro che tutti i dati soddisfino i requisiti. L'evento onbeforeunload è utile, ma ingombrante a causa del modo in cui i browser lo gestiscono. Non posso impedire all'utente di lasciare la pagina, ma sarebbe bello sapere dove stanno andando. Nel mio caso, lo so perché è un reindirizzamento generato da un sito, quindi posso impostare una variabile di sessione. –

risposta

55

Perché non può essere fatto. La nuova posizione è privata/informazioni sensibili. Nessuno vuole che tu sappia quali siti visitano quando lasciano il tuo sito.

+2

Penso che tu abbia sbagliato la domanda, perché dovresti usare onbeforeonload se vai a una pagina sul tuo sito? Non ha senso. Misnyo, puoi chiarire cosa vuoi esattamente? –

+0

La risposta di @bobince qui sotto è interessante: http://stackoverflow.com/a/1687028/538387 – Tohid

+0

@MichelvanEngelen - b/c forse vuoi attivare una schermata di caricamento CSS per far sapere all'utente che si sta preparando a navigare da qualche parte, che hanno effettivamente fatto clic su un collegamento e qualcosa sta accadendo (rende il sito più reattivo, specialmente quando ci vuole un po 'per navigare verso un'altra pagina) – jbyrd

18

La risposta di Kaze è un approccio interessante, ma osservare l'elemento di messa a fuoco quando la pagina viene spostata non è realmente affidabile. In parte perché c'è un ritardo tra il clic del collegamento e la navigazione lontano dalla pagina (durante il quale l'utente può spostare lo stato attivo su qualche altro elemento, ma anche perché un collegamento può essere focalizzato (ad esempio tramite controllo da tastiera o mouse senza -click) senza effettivamente essere utilizzato per navigare lontano dalla pagina.Quindi se hai focalizzato un link e chiuso la finestra, penseresti di seguire il collegamento.

Trapping onclick per ogni collegamento nella pagina (più onsubmit su ogni modulo) è leggermente più affidabile, ma può comunque essere ingannato a causa del ritardo. Ad esempio, fai clic su un link, ma prima che la nuova pagina inizi a caricare premi il pulsante Indietro (o premi Esc). finestra pensa che stai seguendo il link

Voglio prendere l'indirizzo, ciò che l'utente digita nella casella url del browser.

Non c'è modo che accadrà mai. È una privacy ovvia no-no.

+3

Hai ragione, ho rimosso la mia risposta. –

+12

Ma PERCHÉ l'hai fatto. Se la tua risposta non è completamente giusta, non ti preoccupare, le persone hanno la possibilità di giudicarla con il loro voto. Ma può ancora essere utile ad altre persone. Mi sarebbe piaciuto vedere il tuo approccio "ultimo fuoco". – cprcrack

+0

Concordato - @KazenoKoe per favore aggiungi la tua risposta! –

16

Se si desidera solo per vedere che cosa destinazione di collegamento, è possibile utilizzare:

document.activeElement.href 

Ma ottenere la destinazione riga di indirizzo non è possibile.

Ho sentito parlare di soluzioni in cui si attiva un evento se il mouse si sposta verso l'indirizzo (per avvisare l'utente che ci sono processi incompleti che non sono stati gestiti), ma questo tipo di modifica sarebbe mai fare.