为什么设置window.location.href不会停止脚本执行

时间:2016-04-04 09:05:12

标签: javascript redirect

以下代码将位置更改为www.bing.com,无论重定向是否为1或任何其他数字。如果重定向为1,则记录“正在重定向”,然后重定向到www.bing.com。我最好的猜测是,当设置href时,会触发change-event,但在执行之前需要一些滴答。同时,第一行代码仍然执行。要么?做任何事情会发生什么?

if (redirect == 1) {
    console.log("is redirecting");
    window.location.href = "http://www.google.com";
}

window.location.href = "http://www.bing.com";

3 个答案:

答案 0 :(得分:4)

我会说这种行为是未定义的。

当您将预期网址设置为window.location.href时,当前网页实际上将处于dying状态。之后编写的代码结果根本无法预测。

答案 1 :(得分:3)

您正在设置属性,而不是调用方法,区别很重要:

window.location.href = "something";

Javascript工作异常且基于事件, 这意味着浏览器在设置属性时不会检查窗口位置是否正确更改,但稍后会有一些不可预测的时间。

有时您希望在位置更改时触发或触发退出事件。

将此与HTTP位置标头进行比较时,行为是相同的。 有时您甚至希望PHP脚本能够继续发送位置更改标题。

答案 2 :(得分:2)

这是因为if之后的所有内容都已执行,但看起来Chrome和FF之间存在差异(在IE中未经过测试)。

示例代码:

var redirect = 1;

if (redirect == 1) {
    console.log("is redirecting");
    document.location.assign('https://developer.mozilla.org/');
}

alert('go');
document.location.assign('https://www.bing.com/');

在Chrome' go'已被警告,并且您已重定向到bing.com。 在Firefox中,' go'已被警告,但您已重定向到MDN。

我认为,最好的办法是将其他内容包装在else