iOS 17调用history.replaceState致用户媒体视频黑屏,是否为Safari Bug?
iOS 17 Safari中调用history.replaceState导致媒体视频黑屏的问题分析
问题描述
在iPhone上进行视频流传输时,执行代码window.history.replaceState(null, "", browserUrl);更新浏览器URL,该操作在iOS 17的Mobile Safari中会导致摄像头视频变为黑屏,但iOS 16及更早版本无此问题。
复现步骤
- 在Mobile Safari中打开对应演示页面
- 点击“share screen”按钮启动相机视频流
- 视频正常显示后,点击“replace url”按钮
- 视频随即变为黑屏
判断结论
这是Safari在iOS 17中的Bug,而非预期行为。理由如下:
- 该行为仅在iOS 17版本出现,iOS 16及之前版本无此问题,违背了API跨版本功能一致性的预期
history.replaceState的设计目标是修改浏览器历史记录条目而不触发页面刷新,理论上不应干扰正在运行的媒体流- 媒体流播放与URL状态变更属于浏览器中独立的功能模块,两者之间不存在合理的关联逻辑会导致视频黑屏
临时处理建议:
- 若业务场景允许,可延迟调用
replaceState至媒体流稳定运行一段时间后 - 或者在调用
replaceState后,重新触发媒体流的渲染逻辑(例如重新设置video元素的srcObject)
内容的提问来源于stack exchange,提问作者Ivan Banha
相关产品推荐
相关产品推荐

