首页 > 解决方案 > MS Edge 在浏览器最小化时阻止脚本执行

问题描述

我有一个 STOMP websocket 正在运行,它使用 setInterval 向服务器发送 ping。ping 使 HTTP 会话保持活动状态,该会话将在 5 分钟后超时。

似乎在某些情况下 MS Edge 会暂停\阻止 JS 执行。到目前为止,如果我关闭所有 Edge 窗口,然后打开一个最大化的 Edge 窗口并加载我的页面,我已经能够可靠地重现它。我让我的代码运行一分钟,然后最小化 Edge 窗口,然后最大化另一个窗口。此时我的 javascript 停止执行,直到我恢复 Edge 窗口。

我创建了一个基本示例,仅使用 setInterval 并记录时间。在这个例子中,在你最小化,等待一段时间,然后最大化之后,你会看到 JS 没有执行的时间戳有很大的跳跃。https://jsfiddle.net/9vbs7rkh/

const outDiv = document.querySelector('#out');
const log = (msg) => outDiv.innerHTML =`<p>${new Date()}: ${msg}</p>${outDiv.innerHTML}`;
log("start");
setInterval(() => log("test"), 10000);

奇怪的是,如果您在 JSFiddle 页面上打开开发工具控制台,问题将停止在所有选项卡中发生,并且我似乎无法重新触发该问题,直到我关闭所有 Edge 窗口并重新开始。

1) 这是 MS Edge 的记录行为吗?

2)是否有解决方法来防止这种情况,以便用户在短时间内最小化浏览器时不会注销?

标签: javascriptwebsocketmicrosoft-edge

解决方案


推荐阅读