javascript - 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)是否有解决方法来防止这种情况,以便用户在短时间内最小化浏览器时不会注销?
解决方案
推荐阅读
- asp.net-core-2.0 - Asp.Net Core:如何正确地将数据从视图传递到控制器?
- javascript - 使用 JavaScript 的搜索栏中的词序
- node.js - 如何使用 Material-UI 创建 onSubmit
- apache-kafka - 如何将消息类型绑定到单个消费者组上的 Kafka 消费者?
- rabbitmq - 如果已经存在,RabbitMQ 是否创建队列/交换?
- spring-boot - 结合 oauth2+jwt 配置多个身份验证提供程序
- node.js - 在此示例中,如何使用 docker-compose 允许 2 个容器正确共享 .sock 文件?
- flutter - Flutter ButtonBar 儿童尺寸
- c# - 使用 svcutil 从 xsd 生成 DataContract 的问题
- python - 根据特定键合并字典列表