2009-11-06 13 views
37

Szukałem wiele godzin, ale nie mogłem znaleźć rozwiązania.Jak uzyskać docelowy adres URL zdarzenia onbeforeunload?

window.onbeforeunload = warn; 

To nie działa:

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

Ok, tak aby wyczyścić rzeczy. Jeśli użytkownik kliknie link na samej stronie, jest to łatwe, ponieważ można dodać moduł obsługi zdarzeń do wszystkich zdarzeń onclick w linkach, ale. Chcę złapać adres, co użytkownik wpisze w polu adresu URL przeglądarki.

+0

Pracuję w witrynach przetwarzania danych i zanim użytkownik opuści stronę, upewniam się, że wszystkie dane spełniają wymagania. Zdarzenie onbeforeunload jest przydatne, ale kłopotliwe ze względu na sposób, w jaki przeglądają go przeglądarki. Nie mogę powstrzymać użytkownika od opuszczenia strony, ale dobrze byłoby wiedzieć, dokąd zmierza. Tak się składa, że ​​w moim przypadku wiem, ponieważ jest to przekierowanie generowane przez witrynę, więc mogę ustawić zmienną sesji. –

Odpowiedz

55

Ponieważ nie można tego zrobić. Nowa lokalizacja to informacje prywatne/poufne. Nikt nie chce, abyś wiedział, które strony odwiedzają, gdy opuszczają twoją witrynę.

+2

Myślę, że masz pytanie nie tak, dlaczego chcesz użyć onbeforeonload, jeśli przejdziesz na stronę w swojej witrynie? To nie ma sensu. Misnyo, czy możesz dokładnie wyjaśnić, czego chcesz? –

+0

@ Odpowiedź bobince poniżej, jest interesująca: http://stackoverflow.com/a/1687028/538387 – Tohid

+0

@MichelvanEngelen - b/c może chcesz wywołać ekran ładowania CSS, aby poinformować użytkownika, że ​​przygotowuje się do nawigacji gdzieś, że rzeczywiście kliknęli link i coś się dzieje (sprawia, że ​​witryna czuje się bardziej responsywna, szczególnie gdy przeniesienie się na inną stronę trwa trochę czasu) – jbyrd

18

Odpowiedź Kaze jest interesującym podejściem, ale patrząc na skupienie się na elemencie, gdy strona jest od niego oddalana, nie jest naprawdę wiarygodna. Częściowo z powodu opóźnienia między kliknięciem linku a odsunięciem od strony (w tym czasie użytkownik może przenieść fokus na jakiś inny element, ale także dlatego, że łącze może być skupione (np. Za pomocą klawiatury lub mousedown - bez Więc jeśli skupiłeś się na odnośniku, a następnie zamknąłeś okno, prawdopodobnie podążasz za linkiem:

Odławianie onclick dla każdego linku na stronie (plus onsubmit na każdym formularzu) jest nieco bardziej niezawodny, ale nadal można go oszukać ze względu na opóźnienie.Na przykład kliknięcie łącza, ale przed rozpoczęciem ładowania nowej strony, naciśnij przycisk Wstecz (lub naciśnij Escape) .Jeśli zamkniesz okno, które uważa, że ​​podążasz za linkiem.

Chcę złapać adres, co użytkownik wpisuje w polu adresu URL przeglądarki.

Nie ma takiej możliwości. To oczywiste, że nie ma prywatności.

+3

Masz rację, usunąłem odpowiedź. –

+12

Ale DLACZEGO to zrobiłeś. Jeśli twoja odpowiedź nie jest całkowicie poprawna, nie martw się, ludzie mają szansę osądzić to z głosem. Ale nadal może być przydatne dla innych ludzi. Chciałbym zobaczyć twoje podejście "ostatniej koncentracji". – cprcrack

+0

Uzgodniono - @KazenoKoe proszę dodać swoją odpowiedź z powrotem! –

16

Jeśli chcesz po prostu zobaczyć, co link docelowego, można użyć:

document.activeElement.href 

Jednak dotarcie do miejsca docelowego linia adres nie jest możliwe.

Słyszałem o rozwiązaniach, w których wystrzeliwują zdarzenie, jeśli mysz przesunie się do linii adresu (aby ostrzec użytkownika, że ​​są nieukończone procesy, które nie zostały załatwione), ale ten rodzaj hackowania nigdy nie rób.

Powiązane problemy