我有一个使用 webview 的应用程序,其中运行一些 javascript 代码。 在那里,我在执行一些逻辑时使用 requestAnimationFrame 。
该应用程序已经运行了几年,没有出现任何问题,直到最近。
我注意到,由于某种原因,仅在 iOS (Safari) 上,即使逻辑到达与 requestAnimationFrame 关联的行,我传递给它的回调也永远不会被调用。
这段代码在过去几年中一直运行良好,我没有更改任何内容。
有人遇到过这样的问题吗? 是否与 Safari 中所做的任何更改有关?
注意
我不会共享任何代码,因为对 requestAnimationFrame 的调用非常标准,而且我本身没有运行任何动画。
I.E.
requestAnimationFrame(() => {
//Logic here
});
我也遇到了同样的问题。不知道为什么会这样。我现在的解决方案是覆盖 requestAnimationFrame
var lastTime = 0;
window.requestAnimationFrame = function(callback, element) {
var now = window.performance.now();
var nextTime = Math.max(lastTime + 16, now); //First time will execute it immediately but barely noticeable and performance is gained.
return setTimeout(function() { callback(lastTime = nextTime); }, nextTime - now);
};
window.cancelAnimationFrame = clearTimeout;
或者你可以向这个polyfill添加更多条件https://gist.github.com/paulirish/1579671?permalink_comment_id=2976376#gistcomment-2976376