2012年5月1日火曜日

[IE] JavaScriptでリファラを残しつつリダイレクト

JavaScriptでlocation.hrefやwindow.locationを使ってリダイレクトする場合、IEの場合はリファラがつかないためリファラを使った制御を行なっている画面遷移では都合が悪い。

JavaScriptでリダイレクトするとリファラを残してくれないIEの仕様を回避するアイデアがこれ。

参考ページ: http://stackoverflow.com/a/1890744

<script type="text/javascript" >                function redirect(url) {
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
                var referLink = document.createElement('a');
                referLink.href = url;
                document.body.appendChild(referLink);
                referLink.click();
        } else {
                location.href = url;
        }
}
</script>

Aタグを作成し、そこにhref属性を追加。href属性の値にリダイレクト先のURLを代入。
それを、bodyタグの子要素 として追加して、click()アクションで遷移する。

なるほど、そういう発想か。
これなら、IEでもリファラをもったままリダイレクトできる。


とはいえ、リファラがを送信しないユーザもいるので、リファラを頼りに画面遷移を制御するのはやめておいたほうがよさそうです。