Jak zatrzymać przekierowanie meta...
23 sierpnia, 2008
Uniwersalnych sposobów na przekierowanie klienta z jednej podstrony na drugą jest wiele, możemy to zrobić z poziomu protokołu HTTP - parametrem Location. Lecz dla niektórych przeglądarek, antywirusów czy routerów ten parametr jest nie mile widziany. Dlatego też, może stać się tak, że w procesie pobierania dokumentu może on gdzieś... zniknąć.
- I przekierowania nie ma...
Kolejnym sposobem, jest tag <meta /> umieszczany w sekcji <head /> dokumentu. Skuteczność takiego rozwiązania, jest prawie stuprocentowa. Najwyżej któryś z klientów - na własne życzenie, zostanie zapytany czy na pewno, ma dojść do przekierowania.
- "Własne życzenie", ustawia się w polityce bezpieczeństwa browsera...
Ostatnim sposobem - o którym tutaj wspomnę, jest JavaScript - za pomocą obiektu location, oraz pola href natychmiast możemy zmienić interesujący nas dokument. Ale aby zbyt pięknie nie było, w tym przypadku dotyka nas jak-świat-stary-problem. Co wtedy gdy, klient wyłączy JavaScript? Dokładnie, nic.
How to stop javascript refresh?
Dlatego dla największej dostępności, w profesjonalnych projektach sposób numer dwa wydaje się być najlepszym rozwiązaniem. Tylko tutaj nasuwa się pytanie; jak zatrzymać przekierowanie w momencie gdy się "rozmyślimy"?
- Dla przykładu; klient w dokumencie klika na dynamiczny - zasilany JavaScriptem, panel i zaczyna wypełniać formularz. Wypada zresetować mu zawartość formularza oraz postawić go przed innym dokumentem?
Tak jak dla pierwszego sposobu nie ma żadnej opcji "odwrotu", tak dla trzeciego jest - i to całkiem prosty.
<head><script type="text/javascript"><!--var _timer = null;window.onload = function() {_timer = window.setTimeout(function() {location.href = "http://www.example.net/";},5*1000);}// Zatrzymuje przekierowanie, o ile// nie zostało jeszcze wywołane.function stopTimer() {window.clearTimeout(_timer);}--><script></head>
How to stop meta refresh?
A jak zatrzymać przekierowanie <meta />? Tutaj sprawa się komplikuje. Mozilla Firefox oraz Safari zadowalają się wywołaniem window.stop() zaraz po wczytaniu dokumentu. Bez względu na to czy odliczanie się już skończyło, czy też nie.
- Dlaczego po wczytaniu? W przypadku przekierowania tagiem
<meta />, każda przeglądarka inicjuje odliczanie dopiero po wczytaniu całego dokumentu.
<meta http-equiv="refresh" id="_refresh" content="0;url=http://www.example.net/" />
window.addEventListener("load",function() {window.stop();},false);
Natomiast Opera oraz Internet Explorer, wywołanie window.stop() oczekują dokładnie w momencie wywołania procedury wczytania nowej strony (czyli w momencie przekierowania).
- No może nie Internet Explorer, bo... nie obsługuje
window.stop(). Naszczęście jestdocument.execCommand("Stop");.
Na wszelki wypadek - bo nie wiemy nigdy jak długo przeglądarka będzie inicjować wczytanie nowej strony, funkcje stopującą można wywołać kilka razy w odstępie kilku milisekund.
var _time = document.getElementById("_refresh");_time = _time.getAttribute("content").toInt();window.onload = function() {window.setTimeout(function() {var count = 0;var interval = window.setInterval(function() {if(count++ > 100)window.clearInterval(interval);if(_browser.ie)window.document.execCommand("Stop");elsewindow.stop();},5);},_time*1000);};
Samodzielny kod w akcji, można zobaczyć tutaj.
Komentarze do wpisu "Jak zatrzymać przekierowanie meta...":
1.
b4rtaz napisał(a):
23 sierpnia 2008, 16:58:52
Nagłówki w wpisie w języku angielskim na rzecz… angielskich developerów.
2.
Michał Górny napisał(a):
23 sierpnia 2008, 19:09:19
> Lecz dla niektórych przeglądarek, antywirusów czy routerów ten parametr jest nie mile widziany. Dlatego też, może stać się tak, że w procesie pobierania dokumentu może on gdzieś... zniknąć.
Że co? Skąd takie informacje? Jakim prawem/cudem? No, chyba że ktoś podaje „Location” z niewłaściwym kodem statusu, to wtedy nie wykluczę, że może olać.
3.
PiotrLegnica napisał(a):
23 sierpnia 2008, 19:23:22
Po co ustawiać przekierowanie skoro ma być anulowane? o.O Nie mówiąc już o tym, że całe to kombinowanie robi FAIL, gdy JS jest zablokowany (a wywoływanie czegokolwiek co kilka ms to chybiony pomysł).
I nie- z przymiotnikami łącznie. Lern ur polspek.
I czemu te komentarze są tak beznadziejnie położone?
4.
Wasacz napisał(a):
24 sierpnia 2008, 11:04:20
Ale się naszukałem formularza…
Chyba każdy normalny UA potrafi zatrzymać przekierowanie wykonane za pomocą wszystkich wymienionych we wpisie sposobów…
Że nie wspomnę o tym, że przekierowanie w JS to idiotyzm, a co do „Location”, to tak jak Michał napisał – bzdura.
5.
pijanyadmin napisał(a):
25 sierpnia 2008, 23:46:21
Ciekawy szablon masz, trochę mało czytleny, ale i tak miło popatrzeć na coś orginalnego.
Macie na mysli :
header(‘Location: http://localhost/przekierowanie ‘);
fakt na tym IE6 się wykłada :P
Dodaj komentarz: