Iphone iOS 7 Safari:OS在单击/关注HTML输入时会锁定4秒钟

Iphone iOS 7 Safari:OS在单击/关注HTML输入时会锁定4秒钟,iphone,ipad,input,safari,ios7,Iphone,Ipad,Input,Safari,Ios7,更新:问题似乎源于页面上有许多选择元素。这有多随机? 这就是问题所在。在iOS 7 Safari上,在我的网站上点击文本输入时,键盘会打开,然后冻结操作系统约2-5秒,最后滚动到输入。这种情况发生一次后,在刷新页面之前不会再发生。我找遍了所有的地方,是的,iOS 7 Safari是超级马车,但让我们试试看,我们是否能解决这个问题 注意:这不会发生在任何其他移动浏览器或任何以前的iOS Safari中。这在ios 7 iphone和ios 7 ipad上都会发生 我将列出我的朋友和我迄今为止尝试过

更新:问题似乎源于页面上有许多选择元素。这有多随机?

这就是问题所在。在iOS 7 Safari上,在我的网站上点击文本输入时,键盘会打开,然后冻结操作系统约2-5秒,最后滚动到输入。这种情况发生一次后,在刷新页面之前不会再发生。我找遍了所有的地方,是的,iOS 7 Safari是超级马车,但让我们试试看,我们是否能解决这个问题

注意:这不会发生在任何其他移动浏览器或任何以前的iOS Safari中。这在ios 7 iphone和ios 7 ipad上都会发生

我将列出我的朋友和我迄今为止尝试过的一切:

  • 删除了在jQuery中添加事件处理程序的功能。(注意:我们所有的事件处理程序都是通过jQuery分配的,unload和onpageshow除外)
  • 从输入中删除了jQuery自动完成脚本
  • 从输入中删除所有JavaScript
  • 通过拒绝Mac上的域,删除了页面上添加的所有第三方库
  • 切换回以前的jQuery版本。在什么都不起作用之前,我们实际上可以使用的最后一个是1.7.0
  • 切换回以前的jQuery UI版本
  • 将输入事件处理更改为委派和实时,而不是在('单击')
  • 删除了所有CSS类
  • 从页面中删除所有CSS。注意:操作系统的响应时间下降到1-2秒,但仍然发生
有人有什么想法吗


非常感谢

我也有同样的
冻结问题

我不确定我们的处境是否相同

这是我的演示:

在我的页面中,我使用带有
onclick
属性的
元素作为按钮。 当用户单击按钮时,页面将变为
textarea
。 然后单击它将冻结浏览器

冻结所花费的时间与dom元素的数量有关。 在我的页面中,有10000个元素,使其冻结10秒以上

我们可以通过将
元素切换到real
或减少dom元素的num来解决这个问题


ps:对不起,我的英语很差。LOL在具有许多输入的非常复杂的应用程序中遇到了相同的问题

通过USB和记录的UI事件将调试器连接到Safari iOS7。我一点击textarea(或任何输入)就会看到“touchend”事件,然后在10-20秒内看到“click”被调度


很明显,这是Safary中的一个缺陷,就像Android或iOS6等其他设备一样,同一个应用程序没有问题。

这不仅发生在iOS中,也发生在safari 7 for MAC OS(Maverics)中,我发现当您在表单中使用大量div标记来包含输入(或选择)时,就会出现问题:

<div> <select>...</select> </div>
<div> <select>...</select> </div>
...
。。。
... 
...
我改变了我选择的布局,使用ul/li和字段集代替DIV,自由活动时间大大缩短

<ul>
   <li><select>...</select></div>
   <li><select>...</select></div>
</ul>
  • 。。。
  • 。。。
以下是JSFIDLE中的两个示例:

免费5秒钟

冻结1秒钟


我希望它能帮助别人

我的主要问题是隐藏字段。将表单挂起10-15秒

我设法通过将隐藏的表单字段从屏幕上移开来绕过


要隐藏:

position: absolute;
left: -9999px;
显示:

position: relative;
left: 0;

(有一些比较有效的解决方案,请参见列表末尾)

在我的公司,我们也正遭受着这种痛苦。我们向苹果提出了一个问题,但已经听取了妈妈的意见

这里有一些有趣的jsfiddle来帮助说明其中的一些问题,它显然围绕着隐藏字段的数量,而textareas似乎没有受到影响

从调试工作来看,我猜想有一些功能试图检测输入是否是信用卡或电话号码或某种特殊类型,这似乎会导致锁定行为。但这只是一个假设

摘要:

在带有一个表单的页面上,该表单包含标记为“display:none”的容器中的命名输入元素,在该表单中第一次按输入时,在键盘打开和输入被聚焦之间有一个非常明显的延迟(20秒2分钟)。这会阻止用户使用我们的web应用程序,因为用户界面冻结等待键盘响应的时间太长。我们已经在各种场景中对其进行了调试,以尝试和辨别发生了什么,这似乎是由于iOS7解析DOM的方式与它在iOS6上解析DOM的方式有所不同,而iOS6没有这些问题

通过在连接iPad的Safari Inspector中进行调试,我们发现iOS7提供了更多关于(程序)活动的信息,以至于我们发现“CollectFormMetaData”是问题的根源。搜索元数据会导致大量的搅动,随着包含输入的隐藏容器的数量的增加,这种搅动的增加不仅仅是线性的。我们发现,_是可见的,_是相关的FormElement被调用的次数远远超出了它们的合理范围。此外,如果有帮助的话,我们发现一些与信用卡和地址簿相关的检测功能是大量使用的

下面是一些用于说明的jsfiddle。请在Safari中运行iOS6的iPad上查看,然后在运行iOS7的iPad上查看:

-两个都很好

-在iOS 7上只是明显的延迟

-iOS 7上更明显的延迟

-iOS 7上的延迟非常明显

-与29相同,但没有隐藏-在iOS 7上没有延迟

-与29相同,但进一步恶化

-99个隐藏输入,一个可见,一个单独可见

-99个隐藏文本区域,一个可见,一个单独可见

-99个隐藏输入,一个可见,一个单独可见,全部 使用autocomplete=“off”属性

-
<input type="text" autocomplete="off" /> (links to jsfiddle.net must be accompanied by code..)
document.addEventListener("touchend", function (e) {  
     if (e.target.nodeName.toString().toUpperCase() == 'INPUT' || e.target.nodeName.toString().toUpperCase() == 'TEXTAREA') {  
         e.preventDefault(); 
         e.target.focus(); 
     } 
});
document.addEventListener("touchstart", function (e) {
    ... //store the scrollTop or offsetHeight position and compare it in touchend event.
}
var scroll = 0; 
document.addEventListener("touchstart", function (e) { 
    scroll = document.body.scrollTop; 
 });   

document.addEventListener("touchend", function (e) { 
    if (scroll == document.body.scrollTop) { 
        var node = e.target.nodeName.toString().toUpperCase(); 
        if (node == 'INPUT' || node == 'TEXTAREA' || node == 'SELECT') { 
            e.preventDefault(); 
            e.target.focus(); 
            if(node != 'SELECT') {
                var textLength = e.target.value.length; 
                e.target.setSelectionRange(textLength, textLength);
            }
        } 
    } 
});