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

标签 javascript browser interruption interruptions

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

<script>

  foo();

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

  bar();

</script>

剩下的<script>会吗?运行?或者 Javascript 执行会立即被终止吗?

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

最佳答案

可能可能会因浏览器的不同而有所不同,但也可能不会。共识(见下文)似乎是脚本似乎已完成,或者至少需要几秒钟才能完成;一旦完成(或在一段时间后,无论如何),浏览器将关闭该选项卡。

您可以在现代浏览器上相当轻松地测试这一点,方法是执行忙等待并查看在忙等待期间尝试关闭浏览器时会发生什么。

例如,考虑这个页面:

<!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:不显示“我在这里”,但用户界面执行相同的操作:在您请求关闭选项卡后几秒钟内不关闭选项卡。

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

在脚本启动之前单击似乎相当容易,因此您必须在页面加载后等待片刻才能单击关闭按钮。

关于javascript - 如果页面在 JavaScript 执行期间关闭会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585823/

相关文章:

javascript - 通过关闭按钮折叠和打开 div

java - 如何通过java点击按钮?

java - 这个示例代码是简单的还是有理由在这里使用 interrupt()

ios - 带有 AVPlayer 的应用程序在启动后播放 mp4 中断 iPod 音乐

php - Javascript 在从 ajax 调用获取结果之前执行

javascript - Backbone.js 集合获取不起作用

javascript - 运行代码,例如登录,取决于执行哪个测试套件

javascript - 我可以强制浏览器在继续执行 javascript 之前呈现出 DOM 更改吗?

javascript - 如何在我的浏览器上永久允许 GPS 定位(本地 Web 应用程序 JAVASCRIPT)

c - idt_table 未定义!编译内核模块时的警告