2014-12-30 80 views
1

我有一個有趣的問題,我需要解決。簡而言之,Internet Explorer使用window.onblur事件將元素聚焦到iFrame中。因爲這是一個遞歸,你不能點擊iFrame之外的任何東西。 IE9,IE10,IE11(不是IE8及以下)出現問題。Internet Explorer Iframe遞歸window.onblur

測試在這裏:Try it (in IE)

在這裏下載:Download it

我真正的問題是: 有沒有辦法從外面的iFrame覆蓋iFrame中的window.onblur事件?這是一個錯誤,我應該向微軟報告這個地方嗎?

更新

感謝您的幫助@Jonathan桑普森,這種工作方式可以在這裏看到:

See working example - 你必須等待,直到IFrame的滿載能夠覆蓋它

回答

0

我在Internet Explorer團隊工作,很樂意爲您考慮這個問題。要回答您在iframe中覆蓋onblur處理程序的問題,此如果這兩個文檔共享一個公用域,則可能是可能的。在你的例子中,情況就是這樣。

document.querySelector("iframe").contentWindow.onblur = null; 

或者,你可能只需要綁定到使用window.top最高的窗口。

+0

感謝您的光臨。確實有效。但是你需要等到IFrame被加載或者它會被覆蓋。我希望有一種從IFrame之外做到這一點的好方法,但是這個問題是通過這個答案解決的。 – CodingYourLife

+0

@CodingYourLife理想情況下,你應該改變* iframe中的代碼*,以便它綁定到'window.top',或者如果'window!== window.top'只是拒絕向'onblur'添加句柄。如果您需要從頂部窗口進行更改,您可以綁定到iframe的'DOMContentLoaded'或'Load'事件並在那裏運行您的代碼,從而避免使用'setTimeout'。 – Sampson

+0

解決方法解決了我的具體問題。在我的情況下,我有一個標籤導航,改變了iFrame src(沒有其他方式)。我無法掛載加載事件(也無法訪問iFrame內容頁面),甚至嘗試每1秒重置一次onblur,但我甚至可以在調試器中看到onblur在該行後面沒有設置爲null。我所做的是在頁面上發佈了一個新的onblur事件,包括詢問用戶是否想離開當前標籤的iFrame。如果是,我將IFrame src設置爲about:blank,然後覆蓋onblur。 - >把它變成一個「功能」^^ – CodingYourLife