2012-07-06 79 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();

希望能幫助別人。