2009-10-08 98 views
1

我有一個頁面,有一堆不同的內聯框架(A,B,C,D) - 所有這些內容在任何時候都完全可見。它們一起組成了我應用程序UI的各個部分。其中一個iframe(iframe D)包含另一個較小的iframe(iframe X),有時通過用戶操作可以看到它們。只要用戶點擊它,它就會自動消失。我可以輕鬆地在iframe D中通過將onclick放在body上來處理這個問題。如果我真的在iframe D的body中檢測到一個點擊 - 這意味着他們沒有點擊iframe X,所以我可以通過CSS隱藏iframe X.沒問題。如何檢測特定iframe外部的onclick事件?

問題是其他iframe - A,B和C.如果用戶在這些內點擊,我想隱藏iframe X也。目前,我有它的工作 - 但不好。對於這些iframe(A,B,C)中的每一個,我都有將身體點擊傳遞給iframe D的代碼。我不喜歡這種方法,因爲iframe A,B,C都知道iframe X - 真的應該沒有必要,它只是添加到文件,我必須改變,以支持由iframe X提供的功能。有沒有什麼辦法可以處理檢測外部onclick事件的所有內部iframe D?這會在iframe D中留下iframe X顯示/隱藏邏輯,這使代碼更容易移動。

如果我得到的onclick監控去 - 我也想知道是否會處理所有點擊 - 例如,如果iframe中對特定元素設置一些的onclick事件 - 我是肯定也搭上這些點擊?我提到這一點是因爲我目前的解決方法似乎有缺陷(iframe A,B,C報告他們的body onclicks到iframe D) - 某些點擊不會觸發body onclick。

在此先感謝你們。但請記住,在項目的這個階段刪除iframe是不現實的。

回答

1

事件不會跨越iframe邊界,因爲這會帶來安全風險。 想象一個將銀行網站嵌入到iframe中的釣魚網站,並安裝onkeypress處理程序以記錄用戶鍵入到嵌入框架中的任何密碼。

最好的辦法就是可能會有外框安裝正文處理程序,也許還會安裝onunload處理程序,以便它可以根據需要重新安裝正文處理程序。

是的,取消點擊事件冒泡的事件處理程序會將其從身體事件處理程序中隱藏起來。

1

在外部文檔上放置一個YUI面板對象。

然後代替示出的iframe X,顯示了銳面板,具有模態模式,並且在面板內容放< IFRAME ... SRC = X>

當調用parent.panel.show()它將顯示在所有框架上,並且它很容易通過,以允許在面板外部的任何點擊將其關閉。

0

考慮到iframe的限制,您無法以可靠的方式做到這一點。 可以有很多解決方法,但不知道如何適合您的需求。也許,你可以通過ajax ping後端,它會觸發一個改變? 或者,使用兩個版本,一個開放的孩子和一個封閉的孩子,然後你可以操縱父母的隱藏/表演。 或者,用其他不是iframe的iframe替換X. 等 他們可能不是你的特殊需求的可行解決方案。但只是想法。

相關問題