2008-09-26 77 views
5

我創建了一個與相當流行的音樂零售商一起使用的工具。優雅地關閉iframe框架(工具欄)

該工具提供了一個增強的搜索功能(透明的last.fm結果,沒有廣告,沒有跛腳,沒有令人毛骨悚然),我發現最有用和不顯眼的方式來顯示搜索是作爲一個工具欄使用非常maligned iframe中。這允許用戶在不竊取用戶焦點的情況下加載搜索。

不是特別喜歡iframe的人我認爲添加「關閉此框架」(ala Google圖片搜索)鏈接可以讓用戶快速輕鬆地重新獲得對其瀏覽器的控制,這將是微不足道的。

但不像谷歌,我不知道內容在iframe中的位置是什麼(僅在它通過src開始的地方)。

所以現在我發現自己處於XSS世界和所有與安全有關的問題。

使用Javascript我已經添加了「後退」和「前進」按鈕,並且父對象中的鏈接調用了歷史對象(當用戶執行搜索時,結果加載到iframe中,所以後退按鈕允許他們去在完成使用/細讀搜索結果後返回到主站點)。

有什麼方法可以調用iframe中的當前位置並將頁面(現在無框)重新加載到該位置?

我檢查了PHP $ GLOBAL/$ _ SERVER變量,看看我可能會幸運。我明白有安全問題,但我不明白這個特定的函數與history.back()的不同之處在於,瀏覽器在沒有「通知」父框架的情況下自己調用它。

我知道我可以從iframe中檢索src位置,但當然這假設用戶不會瀏覽超出此頁面,如果他們這樣做,他們不介意丟失他們的當前位置並被重定向回頁面最初由框架調用(...啊...)。

它幾乎看起來像框架被設計來竊取窗戶,沒有辦法優雅地'爆發'並保持用戶會話的完整性。

難怪人們討厭他們。 :)

+0

我不知道如果我理解正確的話,你是在主文檔的控制,您顯示在外部文件iframe,並且您希望主文檔在iframe中加載任何內容作爲新的主文檔?並且您沒有與iframe中的文檔進行任何合作? – Jim 2008-09-27 02:10:22

回答

2

在Google圖片搜索時,通過返回到原始幀源,當您刪除該幀時,它將按照您當前的建議運行。對於XSS的原因,找到當前位置應該是不可能的,如果是這樣的話,它將被視爲一個錯誤並在隨後的瀏覽器補丁中修復,因此如果存在這樣的缺陷,可能不是最好的依靠。儘管如此,在沒有透露位置的情況下,優雅地爆發出來的方式會很好。這可能是您可以向HTML5組提出的建議。

0

並不是說它真的太有幫助了,但最接近的可能是檢測是否有人真的離開了原始幀源頁面。在瀏覽框架時,歷史記錄對象會維護條目,並且如果您在頁面加載時的原始歷史記錄長度大於有人單擊「突破此框架...」時的歷史記錄長度,則您知道他們正在瀏覽框架。

0

我很欣賞你(hal10001)和Zach抽空回答。由於xss安全問題,看起來我很勉強(正如我懷疑的那樣)。

我想我可以簡單地包裹所有一個基於PHP的代理中的內容,但顯然進入令人毛骨悚然的區域,更不用說增加的等待時間和什麼,而不是。

我會繼續旋轉這個想法,因爲我遇到了一些理智和可用的東西,但是在那之前我想我會用稍微不那麼好的方法來提升原始框架並消除它們的當前位置(並且if他們不喜歡我可以重溫了iframe /工具欄的情況。

再次感謝!