导航到新的html页面后,浏览器中的Javascript执行何时停止?
之后的行window.location = "index.html";
还在执行吗?包含此行的函数是否返回?当有一个XMLHttpRequest运行时,是否仍会在带有回调代码的页面被调用之后调用onreadystatechange回调?还是setTimeout调用的回调?这个定义得很好吗?
答案 0 :(得分:2)
导航到新页面时,现有页面将完全关闭。 Javascript上下文被停止并丢弃。在几行代码之后,在一堆代码行完全可变之后,这种关闭是否立即发生。在启动新页面加载时,它可能与某些异步时序有关。
多年来,一些浏览器在设置新位置后处理下几行代码的方式略有不同,但在设置新位置后,您不应指望执行任何行,因为设置新位置是告诉浏览器关闭此页面并开始加载新页面。
Chrome中的快速测试显示,下一行的alert()
会在完成加载下一个位置之前执行并等待用户输入,但这是未记录的行为,并且不值得信赖。< / p>
在Firefox中,警报会在屏幕上短暂闪烁,但不会等待用户输入并加载新页面。
智能的代码方法是在设置window.location
后不放置任何代码。这样,您就不会依赖于浏览器之间不同的行为,并且所有浏览器的行为都与您的代码相同。如果您想执行其他操作,请在更改window.location
之前执行此操作。或者,如果您希望当前的代码块完成执行,请更改setTimeout()
中的位置,如下所示:
setTimeout(function() {
window.location = "http://www.stackoverflow.com";
}, 1);
这样可以在页面更改为新位置之前可靠地让当前执行线程完成,因为setTimeout()
通过事件队列工作,并且直到当前执行线程之后才会处理它的事件完成(无论完成多长时间)。