先看代码吧:
//... <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,然后点击。