Подтвердить что ты не робот

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. Этот пример был сделан намного проще, чем в производстве.

4b9b3361

Ответ 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>