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

Что происходит в IE, когда вы устанавливаете 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

Wow matt спасибо вам большое, всюду искал для исправления! IE9 обрабатывает нормальное location.href отлично, поэтому с jQuery я сделал это просто 'if ($ .browser.msie && $ .browser.version.substr (0, 1) <= 8)' Вы правы! –

3

INFO: Internet Explorer не отправляет Referer заголовок в Необеспеченными ситуациях

При соединении из одного документа к другому в Internet Explorer 4.0 и более поздних, заголовок Referer не будет отправлено, когда соединение с страницы HTTPS на страницу, отличную от HTTPS. Заголовок Referer также не будет отправлен, если ссылка связана с протоколом, отличным от HTTP (S), например file: //, на другой странице.

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> 
Смежные вопросы