iOS 在页面处于背景状态时杀死了 Web 工作者,地图永远无法再次加载图片。

作者: lucaswoj创建于 2026年9月15日更新于 2026年9月15日
标签bugenhancementPR is more than welcomed

maplibre-gl-js 版本:6.9.0 浏览器:iOS Safari 和 iOS WebView。在任何浏览器中都可以模拟此行为。 ### 触发行为的步骤 1. 在 iOS Safari 中打开向量或 GeoJSON 地图。 2. 将页面放在后台中,足够长的时间让 iOS 回收内存(通常在一些内存压力下需要 5-30 分钟)。 3. 返回页面并平移到未加载的区域。 ### 演示链接 由于无法从页面 JavaScript 根据需求触发终止,因此 jsbin 无法直接显示 iOS 路径。您可以通过点击调用在工作线程中调用 terminate() 的按钮,然后进行平移,在任何浏览器中重现相同的崩溃状态 此 CodePen。 ### 预期行为 新图块加载。地图继续正常运行。 (或者,至少可以重新创建。) ### 实际行为 永远呈现空白区域,控制台中没有任何内容。iOS 终止工作线程,而不触发任何事件(参见 WebKit 211018Apple 论坛 758346),并且库无法恢复。WorkerPool 将其工作线程缓存在一个 Promise 中,而 RTL 插件单例保持池的活跃数量大于零,因此即使调用 map.remove() 并创建新的 Map,也会重复使用已死亡的工作线程。 ### 先进技术 https://GitHub.com/maplibre/maplibre-gl-js/issues/8192 添加了一个公共 API,用于检查工作线程是否已终止。我希望能够自动从中恢复,正如 @HarelM 所请求的那样。

内容来源: maplibre/maplibre-gl-js