2009-12-11 22 views
16

複雑な検索を行い、読み込み中のページがあります。IEは空のdocument.referrerの後にlocation.replaceを付けます。

<body onload="window.location.replace('results_page.php');" >

または::私たちが使用するロードページで

<body onload="window.location = 'results_page.php';" >

上記の二つのオプションの唯一の違いは、(そのlocation.replaceある)、ブラウザの履歴にページを無視します。私は追跡の目的のためにリファラを読む必要がresults_pageで

<script> alert(document.referrer); </script>

これはdocument.referrerのために返し、空の値IEを除くすべてのブラウザで正常に動作します。

誰かが、IEにリファラーの価値を与えるjavascriptリダイレクトを行うより良い方法を知っていますか?

p.s.この例は、生産時よりもはるかに単純化されています。

+0

urlをwindow.locationに設定すると、どうなるのでしょうか? 'window.location = 'results_page.php''? – leepowers

+0

質問が更新されました。 – mattweg

答えて

24

このように見えるのは、IEユーザーと取引するコストです。ハックなしで修正することはできません。今すぐ仕事をする。聞いてくれてありがとう。

http://webbugtrack.blogspot.com/2008/11/bug-421-ie-fails-to-pass-http-referer.html

私は、この関数を作るために、回避策を使用していました。魅力のように動作します。

<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> 
+0

すごくありがとう、ずっとこれを修正してくれてありました! IE9は正常なlocation.hrefを処理するので、jQueryを使って簡単に 'if($ .browser.msie && $。browser.version.substr(0、1)<= 8)'ルールを作成しました。 –

3

INFO:Internet Explorerのは、Internet Explorer 4.0以降に別のドキュメントからリンクする場合、リンクがあるときに、Refererヘッダが送信されません無担保の状況で

をリファラーヘッダーを送信しませんHTTPSページから非HTTPSページへRefererヘッダーは、リンクがfile://などの非HTTP(S)プロトコルから別のページにリンクしている場合も送信されません。マットに基づいて

Microsoft

0

は、このコードスニペットもIE11を検出して、新しいタブでURLを開く答えます。 Microsoft Edgeブラウザでは、document.referrerをwindow.location.replaceに渡すために追加の変更は必要ありません。

<script type="text/javascript"> 
    function openUrlNewTab(url) { 
    //use userAgent to detect <IE11 and window obj to detect IE11 
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || 
     (!!window.MSInputMethodContext && !!document.documentMode)) { 
     var el = document.createElement('a'); 
     el.href = url; 
     el.target = '_blank'; 
     document.body.appendChild(el); 
     el.click(); 
    } else { 
     window.open(url); 
    } 
    } 
</script> 
関連する問題