Zajímavý IE JS BUG
Dneska jsem narazil na jednu vlastnost Internet Exploreru (6,7,8...) při přesměrování pomocí JavaScriptu - řada z vás ji určitě léta zná, já na ni narazil poprvé.
Příklad: přesměrujete uživatele JavaScriptem (location.href=...) na jinou stránku. Problém nastává, když se chcete vrátit v prohlížeči IE zpět pomocí REFERERa, v PHP tedy například pomocí header("Location: ".$_SERVER['HTTP_REFERER']);.
Internet Explorer nepředává hlavičku HTTP_REFERER, pokud je přesměrování učiněno pomocí JavaScriptu, takže proměnná $_SERVER['HTTP_REFERER'] je, bohužel, prázdná. Není opraveno ani v nejnovější verzi IE8. Třebas je to vlastnost a ne bug, ale vývojáři na ni pohlíží dle diskuzí jako na bug.
Nicméně náprava je vcelku jednoduchá; do cílové adresy v location.href přidáme do GET požadavku i aktuální stránku, na které se uživatel nachází a později testujeme (v PHP např.), zda-li je HTTP_REFERER prázdný a pokud ano, zjistíme předchozí stránku parametrem GET.
HTML:
<span onclick="location.href='/nastaveni/?referer='+document.location.href;">klikni</span>
PHP:
if($_SERVER['HTTP_REFERER']=="") { $_SERVER['HTTP_REFERER'] = $_GET["referer"]; }
header("Location: ".$_SERVER['HTTP_REFERER']);
Ošetření a další omáčka kolem není součástí balení.
Publikováno 09. 10. 2009 02:48, 10248× přečteno