使用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();
}
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();
}
相关文章推荐
- javascript在form表单中使用button按钮实现submit提交方法
- JavaScript在form表单中使用button按钮实现submit提交方法
- javascript:history.go()和History.back()等使用方法
- AJAXPRC实现了使用Javascript调用服务端方法
- JavaScript点击按钮后弹出透明浮动层的方法
- 使用javascript提交form表单方法汇总
- JavaScript中的splice()方法使用详解
- 在Swift中使用JavaScript的方法和技巧
- JavaScript中reduce()方法的使用详解
- 在JavaScript中操作数组之map()方法的使用
- aspx文件中调试JavaScript的一种极有效的设置方法(终于js能调试了!)
- 使用javascript在页面显示26个字母及数字按钮
- dojo的connect方法使用与源代码剖析(在JavaScript里实现类似AOP的效果)
- javascript中this,apply和call方法的使用
- JavaScript使用RegExp进行正则匹配的方法
- setAttribute使用方法 javascript
- 使用 JavascriptCore 与 UIWebView 进行交互拦截Html5的方法
- javascript中全局对象的isNaN()方法使用介绍
- JavaScript中的getTime()方法使用详解
- 在Swift中使用JavaScript的方法和技巧