2SIMPLE

我们已经回来

使用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();
}

创建一个链接,点击它。

Written by Datou

七月 18th, 2006 at 3:25 下午

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

Subscribe to comments with RSS or TrackBack to '使用javascript重定向后让back按钮有效的方法'.

  1. 这个办法挺好,但是听你这样子讲完,我有种理所当然的感觉,似乎应该一早就想到的办法……

    Datou

    2006/07/18 15:47

  2. 恩。。。就连我也很佩服自己亚~
    叫我天才吧,灭活活

    cobalt

    2006/07/18 15:56

  3. 恩,发现一个很严重的问题。在目标页面按f5刷新的时候会出来个对话框。。。

    cobalt

    2006/07/18 15:58

  4. 已经更新

    cobalt

    2006/07/18 16:35

  5. 第二次更新,最终形态出现。

    cobalt

    2006/07/19 09:33

  6. link.click();

    这个只能是IE能用吧

    amalgam

    2006/07/24 09:26

  7. 这个么,似乎的确是的。
    因为现在所有工作都是IE only的,因此没做浏览器兼容性测试。。。

    cobalt

    2006/07/24 10:35

  8. 刷新的时候怎样才能发生重定向呢?怎么写事件啊

    xinlaide

    2007/01/04 20:08

Leave a Reply