2011-06-04 36 views
0

我馬上說明我知道這是不可能的,因爲安全限制,但這裏是我的場景,我正在尋找一些創意解決方法,我可能沒有考慮過。Facebook Canvas IFRAME需要獲得父頁面的ScrollTop()值

我有一個顯示圖像的縮略圖網站。當用戶點擊縮略圖時,我使用jQuery疊加控件(FaceBox)在彈出窗口中顯示全尺寸圖像。彈出窗口的頂部始終位於頁面頂部20像素處,因此需要讀取頁面的scrollTop()值。當我直接訪問我的網站

此功能的偉大工程。但是,當我打開從Facebook的畫布應用的網站上的iframe,我對彈出休息定位代碼。我關閉了Canvas的滾動條,並使用FB.Canvas.setSize(...)手動通知我的IFRAME中的高度更改的父頁面。由於我不允許訪問父級中的ScrollTop()值,因此我的解決方法是將疊加層的頂部相對於源縮略圖的頂部進行定位。這樣可以使疊加層靠近源,但這並不理想,特別是如果縮略圖接近視口的底部。

有,我可以從IFRAME的頂部位置彈出20個像素,但不知何故考慮到(禁止)scrollTop的()的父窗口的位置的任何方式?

這似乎是一個相當常見的場景;我希望Facebook有計劃在未來解決這個問題。對象看起來像是一個很好的候選對象。它有一個scrollTop成員,但它用於Canvas,而不是父框架,並且如果關閉滾動條,則此值始終爲零。

+1

我使用的fancybox在Facebook的帆布iframe和它工作得很好.. – dwarfy 2011-06-04 08:58:08

+0

哇,偉大的鏈接我的朋友。只是看着他們的樣本頁面,這件事很棒。我會把這個連接到我的網站做一個並排的比較。但FancyBox(或任何其他控件)如何設法解決不知道父項的ScrollTop()值是什麼的問題?看起來像這是* ANY *部件的基本障礙。我想唯一的方法是找出FancyBox。再次感謝您的信息。 – 2011-06-04 21:00:57

+1

截止到4月份,Facebook已經爲此添加了一個API調用。 見http://stackoverflow.com/questions/2253702/controlling-scroll-position-for-facebook-iframe-applications-parent-frame – Tom 2011-09-16 23:54:42

回答

5

所以,事實證明,本地FB.Canvas.getPageInfo()方法不正是我想要它做所有沿。我添加了一些代碼,在我的Facebook應用程序(http://apps.facebook.com/ipredikt)中暗中調用此代碼,並返回了我需要的值,以正確定位彈出窗口和覆蓋圖。當我們下一次將新的位推向Azure時,我會更新我的定位代碼,以考慮FB.Canvas.getPageInfo()中的值。