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

Why does setting window.location.href not stop script execution

本文关键字:脚本 执行 设置 window location htm 为什么      更新时间:2023-11-30

无论重定向是1还是任何其他数字,以下代码都会将位置更改为www.bing.com。如果redirect为1,它会记录"正在重定向",然后重定向到www.bing.com。我的最佳猜测是,当设置href时,会触发一个更改事件,但在执行之前需要一些时间。意味着之后的第一行代码仍在执行。或有人知道会发生什么吗?

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

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

window.location.href = "something";

Javascript以异步和基于事件的方式工作,这意味着浏览器不会在您设置属性时检查窗口位置是否正确更改,而是在某个不可预测的时间之后。

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

当您将其与HTTP位置标头进行比较时,行为是相同的。例如,有时您希望PHP脚本继续运行,即使您发送了位置更改标头。

我认为行为是未定义的。

当您将期望的url设置为window.location.href时,当前页面实际上将处于dying状态。之后编写的代码的结果简直是不可预测的。

这是因为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中。