2012-07-06 112 views
2

我有一个应用程序,它有一个我已经构建的iframed wysiwyg编辑器。 iframe内容脱离同一个域名,所以它不是XSS问题,但必须注意保留样式表和内容的沙盒。问题与jQuery键绑定延迟iframes?

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

我基本上已经发现这是一个DOM被混淆的问题,它应该从其绑定队列中取出文件,但是没有提出任何一致工作的解决方案。

这里是我试过到目前为止:

  • 改变了从$(文件),以$选择器(parent.document):这有相反的效果 - 运作良好,然后开始停止工作。

  • 有两个文件,并parent.document的选择:同样的古怪行为

  • 绑定到$(窗口),而不是$(文件):同样的古怪行为

  • 移动键绑定到功能这被延迟后调用:这里没有运气

  • 调用一个函数来触发点击或焦点在iframe身体,看看是否会kickstart jquery:这里也没有运气。

  • 与功能结合玩弄(当前设置为.keydown()) - 切换到。对( '的keydown',.keypress等,没有运气

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

我可以发布我的代码的一些基本示例,如果你需要它,但代码工作正常,我想我要么绑定到错误的东西或有什么其他的东西可以赶上这个,我错过了任何想法?谢谢。

回答

1

找出解决方案。每个浏览器都需要一些不同的东西才能正常工作。这个问题完全是因为iframe文档并不是DOM中的第一个,但是只要您关注iframe,问题就会消失。下面是我为每个浏览器:

  • 铬:

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

  • 火狐:新增重点documentElement,改变触发选择从$(文件),以

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

  • IE:

    $('body').focus();

希望能帮助别人。