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. Этот пример был сделан намного проще, чем в производстве.
Ответы
Ответ 1
Похоже, это всего лишь стоимость ведения бизнеса с пользователями 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>
Ответ 2
INFO: Internet Explorer не отправляет заголовок заголовка в незащищенные ситуации
При связывании одного документа с другим в Internet Explorer 4.0 и более поздних версиях заголовок Referer не будет отправлен, если ссылка находится на странице HTTPS на странице, отличной от HTTPS. Заголовок Referer также не будет отправлен, когда ссылка связана с протоколом, отличным от HTTP (S), например file://, на другую страницу.
Microsoft
Ответ 3
На основе Matt ответьте, что этот фрагмент кода также обнаруживает IE11 и открывает URL-адрес на новой вкладке. В браузере Microsoft Edge никаких дополнительных изменений не требуется для передачи документа .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>