IE在location.replace之后有空的document.referrer

时间:2009-12-11 20:06:30

标签: javascript internet-explorer

我有一个网站可以执行复杂的搜索,并且有一个“加载”页面。在加载页面上我们使用:

<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。这个例子比生产中的要简单得多。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:3)

信息:Internet Explorer不会在不安全的情况下发送Referer标头

在Internet Explorer 4.0及更高版本中从一个文档链接到另一个文档时,当链接从HTTPS页面到非HTTPS页面时,将不会发送Referer标头。当链接来自非HTTP(S)协议(例如file://)到另一个页面时,也不会发送Referer标头。

Microsoft

答案 2 :(得分:0)

根据Matt的回答,此代码段还会检测IE11并在新标签中打开网址。在Microsoft Edge浏览器上,使用window.location.replace传递document.referrer时无需进行其他更改。

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