以下代码将位置更改为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";
答案 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
。