在编写服务器端代码时,当向客户端发送 "Location: ..." 头后,需要显式停止执行,否则您的代码将继续在后台执行。
但是,当您在客户端脚本中更改 window.location 时,是否会立即停止当前脚本的执行,或者由程序员确保在此调用之后不会再执行任何代码?
在编写服务器端代码时,当向客户端发送 "Location: ..." 头后,需要显式停止执行,否则您的代码将继续在后台执行。
但是,当您在客户端脚本中更改 window.location 时,是否会立即停止当前脚本的执行,或者由程序员确保在此调用之后不会再执行任何代码?
这是否立即停止当前脚本的执行?
不是,剩余的处理程序将会一直执行到结束,然后控制权才会返回至浏览器并开始发生事件。当新页面加载到足够程度以便进行“导航”时,beforeunload
和unload
事件将被触发,然后页面及其内含的任何脚本将变为非活动状态。
但是,任何进一步排队的事件和超时可能不会被触发。例如,如果您在表单提交按钮的click
处理程序中导航页面并且不取消默认操作,则有可能(竞争条件)在click
的默认操作中排队的submit
事件之前进行导航。
window.location
已经改变但导航尚未发生)? - speedplane设置window.location
并不会隐式停止JS执行。以下是一个示例:
function locationTest() {
window.location = 'http://www.google.com/';
window.open('http://www.yahoo.com/');
}
locationTest();
试着从Firebug/Web Inspector等工具中运行此代码,你会注意到当前窗口会加载Google,但也会打开一个新窗口加载Yahoo。
return;
以退出流程并让window.location
执行其操作。 - VPaul