iframe 上的 jquery 键绑定延迟问题



我有一个应用程序,它有一个我构建的iframed wysiwyg编辑器。iframe 内容来自同一个域,所以它不是 XSS 问题,但必须对内容进行 iframe 以保持样式表和内容沙盒化。

无论如何,我遇到的问题是我有一些热键要添加到iframe中。例如,点击"删除"会删除对象。点击 control+z 可撤消最新操作。非常基本的东西。我已经设置了所有操作,然后很好地节省了 iframe 加载的前 x 时间。有时我可以立即单击并使用键盘快捷键。其他时候,我必须单击5-10秒或在快捷方式出现之前编辑某些内容。一旦他们开始工作,他们工作得很好,但我们需要他们每次都全力以赴。运行此脚本的脚本在 iframed 内容中加载。该脚本通过验证并以应有的其他方式工作。

我基本上发现 DOM 混淆了它应该从哪个文档中获取键绑定队列的问题,但没有提出任何一致的解决方案。

这是我到目前为止尝试过的:

  • 将选择器从 $(文档) 更改为 $(parent.document) :这产生了相反的效果 - 开始然后停止工作效果很好。

  • 同时将文档和父文档作为选择器:相同的不稳定行为

  • 绑定到 $(窗口) 而不是 $(文档):相同的不稳定行为

  • 将键绑定移动到延迟后调用的函数:这里没有运气

  • 调用一个函数来触发点击或专注于 iframe 主体,看看这是否会启动 jquery :这里也没有运气。

  • 玩弄绑定函数(目前设置为.keydown()) - 切换到.on('keydown',.keypress等,但没有运气

这似乎发生在所有浏览器中,但我在Chrome和FF最新版本中肯定看到了它。

如果您需要,我可以发布一些代码的基本示例,但代码工作正常,我认为我要么绑定到错误的东西,要么还有其他东西可以抓住我错过的东西。有什么想法吗?谢谢。

想出了一个解决方案。每个浏览器都需要一些不同的东西才能使其正常工作。问题完全在于 iframe 文档不是 DOM 中的顶级文档,但是一旦您专注于 iframe,问题就消失了。以下是我为每个浏览器所做的:

  • Chrome:

    $(parent.document).find("#iframe").focus();
  • Firefox:将焦点添加到 documentElement 并将触发器选择器从 $(document) 更改为

    $(document.documentElement).keydown().focus()
  • IE: $('

    body').focus();

希望对别人有帮助。

最新更新