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


Komentáře /0/

Přidat názor

  • Opak léta je…?