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

常见的客户端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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值