2011-06-04 40 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()中的值。