通过单击原始空间的旅行窗口退出全屏时,请求动画帧停止工作。如果使用转义键取消全屏模式或调用cancelFullScreen(),则一切正常。
重现的步骤:
它的作用就是处理点击呼叫:
window.requestAnimationFrame(draw);
只是在画布上下文中绘制了一些内容:
function draw() {
ctx.drawImage(img, Math.random()*500|0, Math.random()*400|0, 100, 100);
}
我还检查了.hidden和.visibilityState,它们得到了正确的更新。
在osx 10.9.3,safari 7.0.4(9537.76.4)上测试。
除了切换到旧的setTimeout之外,还有没有任何解决方法/解决方案?
答案 0 :(得分:1)
这听起来像WebKit Bug 88940:
使用requestAnimationFrame和全屏API DrawingArea支持的窗口将导致rAF永久挂起 完全筛选时的动画,因为以下内容:
- JavaScript会导致全屏转换开始。
- 绘画(和rAF)暂停。
- 页面更改大小。 一个。 DrawingAreaProxyImpl :: sizeDidChange()调用DrawingAreaImpl :: updateBackingStoreState,调用它们 DrawingAreaImpl :: resumePainting。 湾DrawingAreaImpl :: resumePainting恢复绘画,但不恢复rAF,因为windowIsVisible(合法地)是假的。
- 视图变得可见,windowIsVisible更新为true。
- visibilityDidChange()再次调用resumePainting,但这次它提前退出,因为绘画没有暂停。
醇>请注意,由于4中的提前退出,rAF永远不会恢复。
基于此描述,我怀疑没有有效的解决方法,因为绘图区域进入调用resumePainting无效的状态。
(感谢Jason Davies发现此错误报告。)