不一定非要用 jQuery,使用 window.location.replace(...)
就可以很好地模拟 HTTP 重定向。
另外,使用 window.location.replace(...)
比使用 window.location.href
更好,因为 replace()
不会将原页面保留在会话历史记录中,这意味着用户不会陷入无限后退的糟糕情况。
如果要模拟某人点击链接,请使用
location.href
如果要模拟 HTTP 重定向,请使用
location.replace
示例:
// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
注意:此答案仅作为候选的解决方案;它显然不是最好的解决方案,因为它需要 jQuery,纯 JavaScript 解决方案更好。
$(location).attr('href', 'http://stackoverflow.com')
标准的 “vanilla”JavaScript 方式重定向页面:
window.location.href = 'newPage.html';
如果你在这里是因为你在重定向时丢失了 HTTP_REFERER,请继续阅读:
以下部分适用于那些使用HTTP_REFERER
作为许多安全措施之一的人(虽然它不是一个很好的保护措施)。如果您使用的是Internet Explorer 8或更低版本,则在使用任何形式的 JavaScript 页面重定向(location.href 等)时,这些变量都会丢失。
下面我们将实现IE8 及更低版本的替代方案,以便我们不会丢失 HTTP_REFERER。否则你几乎总是可以简单地使用
window.location.href
。
针对测试HTTP_REFERER
(URL 粘贴,会话等) 可以在讲述一个请求是否合法,有益的。 ( 注意:还有一些方法可以解决这些引用者的问题,如评论中的 droop 链接所示)
简单的跨浏览器测试解决方案(回退到 Internet Explorer 9 + 和所有其他浏览器的 window.location.href)
用法: redirect('anotherpage.aspx');
function redirect (url) {
var ua = navigator.userAgent.toLowerCase(),
isIE = ua.indexOf('msie') !== -1,
version = parseInt(ua.substr(4, 2), 10);
// Internet Explorer 8 and lower
if (isIE && version < 9) {
var link = document.createElement('a');
link.href = url;
document.body.appendChild(link);
link.click();
}
// All other browsers can use the standard window.location.href (they don't lose HTTP_REFERER like Internet Explorer 8 & lower does)
else {
window.location.href = url;
}
}