Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果iOS 6 js events函数中有setTimeout,则不调用该函数_Javascript_Jquery_Ios_Html_Ios6 - Fatal编程技术网

Javascript 如果iOS 6 js events函数中有setTimeout,则不调用该函数

Javascript 如果iOS 6 js events函数中有setTimeout,则不调用该函数,javascript,jquery,ios,html,ios6,Javascript,Jquery,Ios,Html,Ios6,我在最新的iOS(iOS 6)中注意到了这种奇怪的行为。如果为任何包含setTimeout的触摸事件调用函数,则setTimeout中的部分永远不会触发 仅当存在“系统动画”(如滚动和放大/缩小)时才会发生这种情况 例如: setTimeout(function(){alert("HI")}, 1000); // using native setTimeout(function(){alert("HI")}, 1000, true); // using workaround (我使用jque

我在最新的iOS(iOS 6)中注意到了这种奇怪的行为。如果为任何包含setTimeout的触摸事件调用函数,则setTimeout中的部分永远不会触发

仅当存在“系统动画”(如滚动和放大/缩小)时才会发生这种情况

例如:

setTimeout(function(){alert("HI")}, 1000); // using native
setTimeout(function(){alert("HI")}, 1000, true); // using workaround

(我使用jquery只是为了测试,但纯js也是如此)

在任何iOS 6设备上使用safari打开该页面并放大或缩小。警报将永远不会被调用

如果在任何iOS5设备上进行测试,这将很好地工作!似乎在这些动画期间,操作系统会重置setTimeout或setInterval。这是预期行为还是错误


谢谢注意:UIWebView似乎不支持requestAnimationFrames。谢谢你指出这一点

我们正在开发的一个web应用程序也遇到了类似的问题

对我们来说,正是这一举动引发了问题。我们实现了一个变通方法(在这里找到:),它似乎工作得很好,直到另一个问题迫使我们放弃它。(我试着在你的小提琴上添加了变通方法,并且能够让计时器启动一两次,但它需要一个奇怪的手势+滚动事件,这几乎不可能持续地重现。)

无论如何,iOS 6为开发者提供的新功能之一是requestAnimationFrames。我的变通方法基本上是一个计时器包装器,允许开发人员传递一个布尔值,它将调用本机函数或变通方法函数

例如:

setTimeout(function(){alert("HI")}, 1000); // using native
setTimeout(function(){alert("HI")}, 1000, true); // using workaround
以下是使用此变通方法的其他方法:

setInterval(function(){console.log("Interval")}, 1000, true);

var timer = setTimeout(function(){ /* ... */ }, 60000, true);
clearTimeout(timer);

var interval = setInterval(someFunc, 10000, true);
if(someCondition) clearInterval(interval);
这里有两个解决方案示例。尝试在黑色方块上进行收缩/缩放:

(使用本机
setTimeout
函数)

我们已经在生产环境中使用此解决方案几个月了,没有遇到任何重大问题

以下是解决方案的公开要点:

以下是有关requestAnimationFrames的更多信息:


祝你好运

谢谢你非常详细的回答,但正如你提到的,这不是解决我问题的正确方法。但现在,我认为这是iOS6中引入的一个bug,而不是一些新功能。对我来说,这似乎是一个解决方案。这是一个巨大的问题,确实让我头疼。更多的人需要看到这个解决方案嗨!在我的例子中(当webview被pullToRefresh时根本没有调用setTimeout),第一个有效()但第二个无效()。你遇到的第一个问题是什么?杰克,在几次提交后刚刚重新测试,现在一切似乎都正常。对不起,误报了!