您的位置:首页 > Web前端 > JavaScript

使用javascript重定向后让back按钮有效的方法

2009-03-31 12:05 302 查看
常见的客户端javascript的重定向方法有这么几种
location.replace(url);
location.href = url;
location = url;
等等

这些方法都是一个问题,在当前页面被替换之后,history对象里当前页面也会被抹掉,因此浏览器back按钮将会导航至非预期的目的地。history.back()方法(或history.go(-1)方法)一样也会失去作用。因此如何让back能发挥预期的作用,或者说如何控制页面回到replace前的上一个页面是个问题。

以下是刚做出来的个函数
function redirectUrl(url)
{
var frm = document.createElement("form");
document.body.insertBefore(frm);
frm.method = "post";
frm.action = url;
frm.submit();
}
即创建一个空form,设置其action为期望地址,然后submit之。
注意method必须设置为post,否则期望url中的querystring部分将不会被视作action的一部分。

其他人还有更好的法子么。。。
================
为了解决F5刷新时会有对话框提示的问题,换了一种方法
function redirectUrl(url)
{
var pureUrl = url;
var queryString;
var paraArray = new Array();
if (url.indexOf("?") >= 0)
{
queryString = url.substr(url.indexOf("?") + 1);
paraArray = queryString.split("&");
pureUrl = url.substr(0, url.indexOf("?"));
}

var frm = document.createElement("form");

if (paraArray.length > 0)
{
for (var i=0; i {
var paraElement = document.createElement("input");
paraElement.type = "hidden";
paraElement.name = paraArray[i].split("=")[0];
paraElement.value = paraArray[i].indexOf("=") >= 0?paraArray[i].split("=")[1]:"";

frm.insertBefore(paraElement);
}
}

document.body.insertBefore(frm);
frm.method = "get";
frm.action = pureUrl;

frm.submit();
}
依然是创建一个form,所不同的是,它会分析url里面querystring部分的key-value对,并根据它们来创建一组input type="hidden"元素,然后以get方式提交此form。
=================

第二次更新,函数的最终形态产生
function redirectUrl(url)
{
var link = document.createElement("A");
link.href = url;
document.body.insertBefore(link);
link.click();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: