如果我在ASP.NET代码中使用服务器端重定向,我知道它会引发ThreadAbortException,因此页面上的所有处理都会立即停止,重定向将立即发生(在"最后&#之后) 34;条款)。
但是,假设我在JavaScript块中进行重定向(通过设置location.href或使用location.replace),此重定向何时实际生效?
重新加载页面显然会卸载当前的脚本块,但基于快速测试,重定向后仍然可以使用警报语句。重定向是否仅在当前事件的处理完成后才会发生?更重要的是这种行为是标准化的,还是只是一种事实上的约定?
答案 0 :(得分:1)
好的,我已经做了一些自己的测试。 Jerebear是正确的,如果你有一个直接发生在脚本标签内的重定向(即加载脚本标签时执行重定向),那么这将停止在同一页面上加载任何进一步的脚本标签。所以,如果你有类似的东西:
<script> a(); redirect(); b(); </script>
<script> c(); </script>
然后执行a和b但不执行c,因为永远不会加载第二个脚本。
然而,这只是故事的一部分。我真的在考虑当你因为一个事件(点击,计时器等)而重定向时会发生什么。答案是,执行重定向并不会停止在页面上处理的事件。这意味着所有事件将继续正常工作,直到新页面开始加载。
所以一般的答案是重定向直到从服务器收到新页面才真正生效,尽管它的副作用是不加载任何更多的脚本标签(可能不加载其他资源)当前页面。
答案 1 :(得分:0)
重定向发生在处理'script'标签集内的所有内容的末尾。这样,DOM可以在处理单个操作时将该脚本标记内的所有内容放入内存中。
如果您在第二组脚本标签中进行了处理,则会忽略这些说明。