iframe上jquery键绑定延迟的问题?

时间:2012-07-06 14:18:03

标签: jquery iframe key-bindings

我有一个应用程序,它有一个iframed所见即所得的编辑器。 iframe内容来自同一个域,因此它不是XSS问题,但必须将iframed用于保持样式表和内容的沙盒。

无论如何,我遇到的问题是我想要添加到iframe的某些热键。例如,点击“删除”会删除一个对象。点击控制+ z撤消最新动作。很基本的东西。我已经完成了所有操作设置,然后在iframe加载的第一个x时间内工作得很好。有时我可以立即点击并使用键盘快捷键。其他时候我需要点击5-10秒左右或在快捷方式出现之前编辑一些内容。一旦他们开始工作,他们工作得很好,但我们需要他们每次都能完成工作。这个运行的脚本加载到iframed内容中。该脚本通过验证并以其他任何方式工作。

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

这是我到目前为止所尝试的内容:

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

  • 同时将document和parent.document作为选择器:相同的不稳定行为

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

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

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

  • 使用绑定功能(目前设置为.keydown()) - 切换到.on('keydown',.keypress等没有运气

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

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

1 个答案:

答案 0 :(得分:1)

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

  • Chrome:

    $(parent.document).find("#iframe").focus();

  • Firefox:将焦点添加到documentElement并将触发器选择器从$(文档)更改为

      $(document.documentElement).keydown().focus()

  • IE:

    $('body').focus();

希望能帮到别人。