【问题标题】:What happens to code after a javascript redirect (setting window.location.href)?javascript 重定向(设置 window.location.href)后代码会发生什么?
【发布时间】:2012-05-18 12:41:26
【问题描述】:

我有以下 javascript 重定向代码,后跟一些代码。

window.location.href = '/someurl';
alert('hello');
alert('hello again');

这会导致浏览器不一致。

在 Firefox 中,第一个警报在重定向之前的瞬间可见。第二个警报根本不可见。

在 chrome 中,两个警报都会弹出,并且只有在两个警报都单击“确定”后才会发生重定向。

是否有一些关于重定向后代码会发生什么的概念可以解决这些差异?如果重定向是异步的,那么 chrome 在做什么?我想了解正在发生的事情,以便我可以确定在重定向深埋在某些回调和其他逻辑中的更复杂的场景中该怎么做。

【问题讨论】:

  • 你为什么要在重定向后做任何事情?
  • 这一切都取决于时间——一旦你改变了位置,你就不能依赖处理/渲染/等需要多长时间。
  • @Musa 实际上在重定向后不想做任何事情,这就是出现这个问题的原因。例如,如果重定向应该发生在从其他库的代码触发的回调中,则在库调用我的回调之后,库可能会执行其他内容。但是,如果我只想重定向页面而不运行其他东西,我可能需要做一些事情来阻止它正常运行,这取决于浏览器正在尝试做什么。

标签: javascript firefox google-chrome cross-browser window.location


【解决方案1】:

面对即将到来的厄运,Javascript 会话将难以继续其使命。以这种方式编码被认为是不可预测的。 ......而且很残忍。

【讨论】:

    【解决方案2】:

    浏览器会尝试执行window.location.href = 'url'之后的代码,直到页面转到下一个网址,所以将执行的代码行数取决于浏览器的速度

    【讨论】:

    • 谢谢,这似乎是合理的。我试图通过在重定向后添加一个长时间运行的循环来测试这一点。如果是速度问题,浏览器不会在循环期间随机重定向吗?无论循环中有什么,chrome 和 firefox 似乎都会执行所有代码(除非循环中有警报,在这种情况下,firefox 会在该点进行重定向)。我不确定长时间运行的循环测试是否是最好的测试......
    • 你是对的。也许不是速度,而是每个javascript函数的优先级
    • @DaniloValente 你有什么资源可以确认这一点
    • @johnny5 我只是有自己作为“资源”的经验,但MDN docs 可能有用...无论如何,正如比尔巴德所说,依赖window.location 之后的代码是不安全的.
    • 是的,我正在搜索规范中的任何内容,最终不得不使用解决方法
    猜你喜欢
    • 2015-02-01
    • 2014-10-21
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多