我有一个运行在Ubuntu Chrome上的web应用。我的屏幕是触摸屏,没有键盘供用户使用。我在每个需要输入的屏幕上都使用自己的JavaScript键盘。现在,我需要在我的应用中嵌入一个外部表单,它位于iFrame中。我对这个页面内容没有控制权。
我的问题是如何为我的用户提供键盘来填充此iFrame字段?
我探索了两个选项:
1.触发键盘事件-失败,因为已弃用,主要原因是存在安全问题
1.显示chrome的虚拟键盘-无法找到一种方法来控制它何时弹出,因为我不希望它出现在我自己的页面中。
有人能帮忙吗?
1条答案
按热度按时间relj7zay1#
对于像我这样多年后发现这一点的人来说:
实际上,这个问题没有完整的答案,因为有几个问题。
实际上,你可以在iFrame的文档中添加
focus/focusin
和blur/focusout
的事件监听器。它可以工作,但是有很多页面包含用于登录等的嵌套iFrame。如果你现在也尝试在它们的文档中添加监听器,CORS会阻止它。这实际上是一件好事,因为我们还可以监听按键事件并获得密码等。
现在,即使您停用了CORS(当然您不应该),您仍然需要一个MutationObserver,因为许多页面会改变DOM来显示输入和其他内容。节点也必须 “扫描” 输入和iFrame,以及iFrame的文档。
所以你会看到这将是一个巨大的递归混乱,这可能对性能也很不利。不要忘记随之而来的漏洞。
这就是为什么大多数虚拟键盘扩展,例如Chrome,只是不工作的说,iFrame。
如果你想像他们那样做,你基本上只需要为键盘相关的输入类型定义一个白名单,选择iFrame并执行以下操作:
对于“blur”(键盘关闭),甚至不需要条件。