Cordova IOS 12 Wkwebview主体滚动问题

Cordova IOS 12 Wkwebview主体滚动问题,cordova,scroll,ios12,Cordova,Scroll,Ios12,我有一个Cordova应用程序(PGB cli-6.5.0、Cordova iOS 4.3.1、wkwebview),它在iOS 12.1上表现出奇怪的行为。在iOS 12之前,该代码已运行多年。该应用程序允许在应用程序中实现各种数字输入样式,但也包括标准键盘。在iOS 12中,弹出式输入div或标准键盘显示正常,但触摸未在正确位置注册。它们是垂直偏移的(记住,在视觉上一切都是正常的)。即使使用标准键盘也是如此。更改设备方向可以修复该实例的问题,但问题将在下次选择输入时保留。在iOS 12 Sa

我有一个Cordova应用程序(PGB cli-6.5.0、Cordova iOS 4.3.1、wkwebview),它在iOS 12.1上表现出奇怪的行为。在iOS 12之前,该代码已运行多年。该应用程序允许在应用程序中实现各种数字输入样式,但也包括标准键盘。在iOS 12中,弹出式输入div或标准键盘显示正常,但触摸未在正确位置注册。它们是垂直偏移的(记住,在视觉上一切都是正常的)。即使使用标准键盘也是如此。更改设备方向可以修复该实例的问题,但问题将在下次选择输入时保留。在iOS 12 Safari或Chrome上使用web版本的应用程序不会发生这种情况。这在使用Cordova本机版本的Android上不会发生

使用调试器,我发现在标准键盘因键盘可能包含的输入而被取消后,body元素有一个非零的scrollTop。这永远不应该发生。我找到的修复方法是在onblur事件处理程序中设置body.scrollTop=0

我发现即使是没有显示标准键盘的自定义输入也在这样做。设置body.scrollTop=0会在选择标准键盘(不应显示)可能覆盖的输入时,在正文上引起明显的“反弹”

我已经尝试过将KeyboardDisplayRequiresAction设置为false,并在不做任何更改的情况下使用最新的PGB版本(cli-7.1.0)。在事件处理程序中设置调试器断点似乎表明,即使调用了preventDefault(),键盘也会显示,它只是在呈现之前再次消失

通过将输入设置为只读,我使键盘暂时停止显示。这在iPad上是可行的,但在iPhone上会出现一个标签导航器,而不是键盘(基本上只是标准的键盘标题)。我无法在iPhone上停止此操作。当我不使用标准键盘时,我最终改为使用跨距而不是输入。无论如何,这可能是最好的

我的初步结论是,iOS 12 wkwebview存在三个漏洞:

  • preventDefault()不会完全阻止键盘显示和滚动正文,当然,这是必需的。它似乎只是在渲染前显示后将其删除
  • 类似地,在输入元素上设置readOnly也不会完全阻止键盘显示
  • 每当wkwebview在选择键盘将覆盖的输入后显示键盘时,它会滚动正文以保持输入可见,但在关闭时无法恢复scrollTop,即使显示看起来好像已恢复。这将按滚动量替换所有触摸事件。如果在替换的按钮位置进行触摸,甚至可以在手指下看到单击动画。还记得更改设备方向会恢复正确的滚动
我看不出科尔多瓦和我的JS是如何导致这种情况发生的

其他人注意到了吗?

解决了:

首先,在项目中搜索以下内容:

<preference name="DisallowOverscroll" value="false" />
注:

  • 我正在运行cordova v.9.0.1和iOs 13.6.1
  • 我注意到我的cordova项目有2个config.xml(我不知道为什么),无论如何,您必须修改的那一个放在
    platforms/ios//config.xml
啊哈!看见
<preference name="DisallowOverscroll" value="true" />
position: fixed;
overflow-y: hidden;