2009-12-11 103 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>

能正常工作在所有瀏覽器除了IE以外,返回和document.referrer空值。

任何人都知道一個更好的方式來做一個JavaScript重定向,這將給IE的值的引用?

p.s.這個例子已經變得比在生產中簡單得多。

+0

當你將url設置爲window.location時,IE會發生什麼情況:'window.location ='results_page.php''? – leepowers 2009-12-11 20:14:03

+0

更新了問題。 – mattweg 2009-12-11 20:21:39

回答

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)'你統治! – 2012-07-26 17:25:34

3

INFO:Internet Explorer不會發送Referer標頭在不安全的情況

當從一個文檔鏈接到另一個在Internet Explorer 4.0及更高版本,Referer標頭將不會發送當鏈路從HTTPS頁面轉到非HTTPS頁面。當鏈接是從非HTTP(S)協議(如file://)到另一個頁面時,Referer頭也不會被髮送。

Microsoft

0

基於馬特回答這個代碼片段還檢測IE11並在新標籤頁中打開鏈接。在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>