更改window.location是否会停止执行javascript?

时间:2010-03-29 09:08:49

标签: javascript

编写服务器端代码时,需要在向客户端发送“Location:...”标题后明确停止执行,否则您的代码将继续在后台执行。

但是当你在客户端脚本中更改window.location时呢?这是否会立即停止执行当前脚本,还是由程序员决定是否确保未到达此调用后的任何代码?

2 个答案:

答案 0 :(得分:17)

  

这是否会立即停止执行当前脚本

不,剩余的处理程序脚本将在控制权返回浏览器并且事件开始发生之前执行到最后。当加载新页面足够“导航”时,beforeunloadunload事件将触发,然后页面,其中的任何脚本都将变为非活动状态

但是,任何进一步排队的事件和超时都可能无法触发。例如,如果您在表单提交按钮的click处理程序中导航页面并且不取消默认操作,则可能(竞争条件)导航在submit事件排队之前发生通过click的默认操作。

答案 1 :(得分:12)

设置window.location不会隐式停止JS执行。以下面的例子为例:

function locationTest() {
  window.location = 'http://www.google.com/';
  window.open('http://www.yahoo.com/');
}

locationTest();

尝试从Firebug / Web Inspector / etc运行它。你会注意到当前窗口会加载谷歌,但雅虎也会打开一个新窗口。