假设用户在 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/