如果页面在javascript执行期间关闭会发生什么?

时间:2015-09-15 12:14:21

标签: javascript browser interruption interruptions

假设用户关闭当前页面对应的选项卡,当时 t1 ,正在运行脚本:

<script>

  foo();

  // t1 <----------

  bar();

</script>

<script>的其余部分会运行吗?或者Javascript执行被立即杀死了?

我可以想象如果给出第二个<script>下面描述的那个,第二个脚本永远不会运行。但也许第一个被视为一个单一的,不间断的东西?

1 个答案:

答案 0 :(得分:3)

可能这可能因浏览器而异,但可能不同。共识(见下文)似乎是脚本似乎已完成,或者至少需要几秒钟才能完成;一旦它(或者在一段时间后,无论如何),浏览器将关闭标签。

您可以通过忙碌等待,在繁忙等待期间尝试关闭浏览器时看到会发生什么,在现代浏览器上轻松测试。

例如,请考虑以下页面:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Example</title>
<style>
html, body {
  margin: 0;
  padding: 0;
}
</style>
<body>
<p>I'm here</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var d = Date.now() + 10000;
while (Date.now() < d) {
}
</script>
</body>
</html>
  • Chrome :显示“我在这里”,如果您点击关闭标签按钮,它几秒钟内就不会关闭(好像循环完成)。 (如果它从未完成,可能是Chrome最终会告诉你脚本行为不端。)

  • Firefox :不会显示“我在这里”,但UI会执行相同的操作:请求关闭标签后,请勿关闭标签几秒钟。< / p>

  • IE11 :可能或可能不会显示“我在这里”,点击“关闭标签”按钮似乎比Chrome更快(但仍然在几秒钟后)响应。< / p>

在脚本启动之前,似乎很容易点击中的点击,所以在点击关闭按钮之前你必须等待页面加载。