为什么`alert("2nd");`执行`window.history.back();`?

pop*_*nja 5 javascript

当我运行以下两个JavaScript命令时......

> window.history.back(); alert("2nd");

...我希望窗口转到上一页,然后显示警报.实际上会发生"第二次"弹出,然后窗口又回来了.如果我像这样扭转他们......

> alert("2nd"); window.history.back();

...命令仍以相同的顺序执行.我对JavaScript控制流程有何了解?我怎么能window.history.back();先跑?

Gol*_*rol 4

好吧,在加载其他页面后不显示警报是有道理的。该脚本是加载页面的一部分,因此如果这可行,则意味着您可以在上一页中注入 javascript,这当然是不可取的。

所以在我看来,有3种可能性:

  1. back 函数是阻塞的,会立即工作,导航到上一页,并终止正在运行的脚本。这显然不会发生,否则你根本不会收到警报。
  2. back 函数会立即工作,但只有当浏览器有足够的信息开始加载其他文档时,脚本才会终止。事实似乎并非如此。如果是这样,浏览器可能会在警报打开时在后台加载文档,但这种情况不会发生。
  3. 返回函数只是向浏览器发出返回信号,脚本将继续运行,直到其空闲,然后才真正满足该请求。情况似乎是这样。仅当警报关闭并且脚本结束时才开始导航。(至少在 Chrome 中)。

无论如何,如果您希望此功能正常工作,您必须alert从您正在导航到的页面进行调用。