【问题标题】:IE has empty document.referrer after a location.replaceIE 在 location.replace 之后有空的 document.referrer
【发布时间】:2009-12-11 20:06:29
【问题描述】:

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

<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 之外的所有浏览器上都可以正常工作,IE 会返回 document.referrer 的空值。

任何人都知道更好的方法来做一个 javascript 重定向,这将为 IE 提供一个值的引荐来源?

附言这个例子比它在生产中要简单得多。

【问题讨论】:

  • 当你像这样将 url 设置为 window.location 时,IE 中会发生什么:window.location= 'results_page.php'?

标签: javascript internet-explorer


【解决方案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>

【讨论】:

  • 哇,马特非常感谢您,一直在寻找解决此问题的方法! IE9 处理正常的 location.href 很好,所以我用 jQuery 简单地做到了if ( $.browser.msie &amp;&amp; $.browser.version.substr(0, 1) &lt;= 8 ) 你统治!
【解决方案2】:

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

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

Microsoft

【讨论】:

    【解决方案3】:

    基于 Matt 的回答,此代码 sn-p 还检测到 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>
    

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 2019-10-24
      • 2013-07-16
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2015-02-28
      • 1970-01-01
      相关资源
      最近更新 更多