开发者问题收集

我如何重定向到另一个网页?

2009-02-02
7925847

如何使用 jQuery 或纯 JavaScript 将用户从一个页面重定向到另一个页面?

3个回答

不能简单地使用 jQuery 进行重定向

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";
Ryan McGeary
2009-02-03

警告: 此答案仅作为一种可能的解决方案提供;它显然 不是 最佳解决方案,因为它需要 jQuery。相反,最好使用纯 JavaScript 解决方案。

$(location).prop('href', 'http://stackoverflow.com')
Boris Guéry
2009-10-28

标准的“原始”JavaScript 页面重定向方式

window.location.href = 'newPage.html';

或者更简单:(因为 window 是全局的)

location.href = 'newPage.html';

If you are here because you are losing HTTP_REFERER when redirecting, keep reading:

(Otherwise ignore this last part)


以下部分适用于那些使用 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; 
    }
}
Mark Pieszak - Trilon.io
2012-07-27