javascript - JavaScript 重定向何时真正生效?

标签 javascript redirect

如果我在 ASP.NET 代码中使用服务器端重定向,我知道它会引发 ThreadAbortException,因此页面上的所有处理将立即停止并且重定向将立即发生(在“finally”子句之后)。

但是,假设我在 JavaScript block 内进行重定向(通过设置 location.href 或使用 location.replace),该重定向何时真正生效?

重新加载页面显然会卸载当前脚本 block ,但基于快速测试,重定向后的警报语句仍然有效。重定向是否仅在当前事件处理完成后才发生?更重要的是,这种行为是标准化的,还是只是一种事实上的约定?

最佳答案

好的,我自己做了一些测试。 Jerebear 就他所说的而言是正确的,如果你有一个直接发生在脚本标签内的重定向(即重定向在加载脚本标签时执行),那么这将停止在同一页面上加载任何其他脚本标签。所以如果你有类似的东西:

<script> a(); redirect(); b(); </script>
<script> c(); </script>

然后 a 和 b 会被执行,但 c 不会被执行,因为第二个脚本永远不会被加载。

然而,这只是故事的一部分。我真的在考虑当您由于事件(点击、计时器等)而重定向时会发生什么。答案是进行重定向根本不会停止页面上正在处理的事件。这意味着所有事件继续正常工作,直到新页面开始加载。

所以一般的答案是,在从服务器接收到新页面之前,重定向不会真正生效,尽管它确实具有不再加载任何脚本标签(并且可能不加载其他资源)的副作用当前页面。

关于javascript - JavaScript 重定向何时真正生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677866/

相关文章:

javascript - Html5 Canvas 限制

javascript - 在javascript中使用document.querySelector获取数组中的值时出现错误NULL?

javascript - 如何删除选定的元素 react

ruby-on-rails - 链接回到表格前访问的页面

apache - 使用 htaccess 从 URL 中删除字符

javascript - 服务工作线程不会在初始加载时拦截第一个获取调用

javascript - polymer 中的简单冲压 IF 不起作用

php - 我如何判断一段流量是不是 Facebook?

angular - 如何根据包含 Angular 哈希的 url 参数中的产品美化 URL

javascript - 如何重定向到外部 URL 并在 Meteor 中收集客户端数据