为什么设置window.location.htm不会停止脚本执行
Why does setting window.location.href not stop script execution
无论重定向是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
中。
相关文章:
- 在服务器端脚本执行后关闭选项卡
- 脚本执行多次
- 根据屏幕大小阻止脚本执行
- 检测TAB键并使脚本执行成为条件
- 脚本执行,但代码隐藏不执行
- 如何使用应用程序脚本执行API从谷歌工作表中提取数据
- 为什么设置window.location.htm不会停止脚本执行
- document.write(“anything”) 不会在 Internet Explorer 中作为外部脚本执行
- Extjs4 和 IE8 :选项卡上的 beforeclose 事件会抛出“无法从释放的脚本执行代码”
- 具有 asyc 属性的脚本仍会阻止其他脚本执行
- 如何在特定行暂停 JS 脚本执行
- JavaScript - 在高负载脚本执行之前绘制 html-mask
- 重新加载 Chrome 扩展程序内容脚本执行环境
- 将脚本执行保留在新打开的页面中
- 在脚本执行结束时关闭弹出窗口
- JavaScript 脚本执行时间太长.获取脚本需要太长时间提示
- 为什么 url 中的“#”会阻止 jquery 脚本执行
- 脚本执行两次,但时间戳相同
- Javascript setTimeout 会停止其他脚本执行吗?
- jQuery 在单击事件中的 if 条件后停止脚本执行