使用 iFrame 表单(iOS Safari)后,iPhone 数字键盘不断弹出

Posted

技术标签:

【中文标题】使用 iFrame 表单(iOS Safari)后,iPhone 数字键盘不断弹出【英文标题】:iPhone numbers keyboard keeps popping up after using iFrame form (iOS Safari) 【发布时间】:2018-06-09 11:31:01 【问题描述】:

我们的 React Web 应用程序使用 Stripe 元素表单进行结帐(请参阅 here 了解详细信息)。它将 iFrame 表单注入网站。正如预期的那样,在 ios Safari 上使用该网站时,当用户专注于 Stripe 输入时,会弹出信用卡键盘。

但后来事情出错了。首先,如果用户点击页面上的其他地方,键盘会保持向上。不是什么大问题,因为您可以点击“完成”来关闭键盘。

然后 - 任何时候用户点击网站,键盘都会弹出。 点击“完成”没有任何作用 - 在下一次点击时,它会再次弹出。在用户关注另一个输入字段后,它终于停止了。

当 React 组件卸载时,我尝试在 Stripe 元素上手动调用 blur(),但没有成功。令人难以置信的是,您可以使用 Xcode 模拟器复制此问题。到底是怎么回事?

【问题讨论】:

我在 iPhone 上使用 Square Pay 的表单时遇到了同样的问题。这似乎是一个 iframe 问题。很烦人。如果我解决了,我会告诉你的。 作为临时修复,在有人提交卡片后,我安装一个隐藏的文本输入字段并调用 focus() 然后 blur() 。傻。 这对我也有用。我正在考虑使用 square 的 api 而不是它们的形式。 【参考方案1】:

您是否有机会在 iOS 上使用 Firefox?

我刚遇到这个问题:我会单击一个输入框,然后单击键盘上的“x”或“完成”,然后每当我单击其他任何地方时,键盘都会弹回。

模拟它的代码在这里

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  </head>
  <body>
    <div>
      <input value="hiya">
    </div>
    <div>Click here after clicking the input and the keyboard will come back.</div>
  </body>

</html>

在 Safari 或 Chrome 上不会发生这种情况。

【讨论】:

这发生在我的 iOS Safari 上,而且只有 Stripe 输入字段 :) 但这个错误听起来很相似

以上是关于使用 iFrame 表单(iOS Safari)后,iPhone 数字键盘不断弹出的主要内容,如果未能解决你的问题,请参考以下文章

在移动 Safari 中按下后退按钮后,Javascript 停止在 iframe 中执行

safari,IOS下iframe宽高度被内容撑出设备高度

如何让 IFrame 在 iOS Safari 中响应?

Phonegap / Cordova ios外部链接iframe无法在safari中打开

safari支付问题

IOS15 升级后 Iframe 内容未加载到 Iphone 中