IE中window.location丢失的referer

  先看代码吧:

//...
<script type="text/javascript">
function doConfirm(url, msg) {
  var ret = confirm(msg);
  if(ret) {
    window.location = url;
  }
}
</script>
<a href="#" onclick="doConfirm('process.php','确定要删除吗?')">删除</a>
//...

  不直接链接到process.php为的是防止误操作导致数据删除,用JavaScript确认窗口来确认一次。

  可就这样一个窗口确认在IE下却出了问题,我想在process.php处理过之后,再返回前一页,也就是上面代码的那一页,是动态页没有固定的URL,所以我要在process.php中获取前一页的referer,得到的却是空值。在Firefox、Opera和Chrome均能正确获取,看来这是IE的BUG。

  Google了一下,第一条记录便是相关的,作者同样也遇到这样的问题,写得还挺详细:“Referer” header not set on HTTP requests originating from assignment to “window.location” variable on IE6

  修改一下即可:

<script type="text/javascript">
function doConfirm(url, msg) {
  var ret = confirm(msg);
  if(ret) {
    var a = document.createElement("a");
    if(!a.click) {
      window.location = url;
      return;
    }
    a.setAttribute("href", url);
    a.style.display = "none";
    document.body.appendChild(a);
    a.click();
  }
}
</script>

  原理是在页面中创建一个a元素,设置href,然后点击。

原创文章,转载请注明出处:代码人生https://www.code-life.com/
本文链接地址:https://www.code-life.com/?p=144

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注