为什么`alert(“2nd”);``之前执行`window.history.back();`?

时间:2014-03-29 14:51:34

标签: javascript

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

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

...我希望窗口转到上一页,然后显示警报。发生的事情是“第二个”实际上首先弹出,然后窗口返回。如果我像这样反转他们......

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

...命令仍以相同的顺序执行。我对JavaScript控制流程有何了解?我如何让window.history.back();先运行?

2 个答案:

答案 0 :(得分:4)

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

所以我看到它有三种可能性:

  1. 后退功能正在阻止并立即工作,导航到上一页,并终止正在运行的脚本。这显然没有发生,否则你根本就不会得到警报。
  2. 后退功能立即起作用,但只有当浏览器有足够的信息开始加载其他文档时才会终止脚本。似乎并非如此。如果是,浏览器可能会在警报打开时在后台加载文档,但这不会发生。
  3. 后退功能只是表示浏览器返回,并且脚本在实际满足该请求之前一直保持运行直到它处于空闲状态。这似乎是这种情况。仅在警报关闭且脚本结束时才开始导航。 (至少在Chrome中)。
  4. 无论如何,如果您希望这项工作正常,则必须从您导航到的页面中致电alert

答案 1 :(得分:0)

在实际执行后退之前,必须将控件返回给浏览器。它只是在你有机会时告诉页面,回去。

一旦控制返回,就会调用浏览器卸载挂钩(onbeforeunloadonunload,浏览器特定事件。)