我会马上声明我知道由于安全限制而无法实现这一点,但这是我的方案,我正在寻找一些创意解决方案可能没有考虑过。
我有一个显示图片缩略图的网站。当用户点击缩略图时,我使用jQuery叠加控件(FaceBox)在弹出窗口中显示完整大小的图像。弹出窗口的顶部始终位于距页面顶部20个像素的位置,因此需要读取页面的scrollTop()值。
当我直接访问我的网站时,此功能非常有用。但是当我从一个 Facebook Canvas应用程序加载IFRAME 中加载网站时,弹出窗口的定位代码会中断。我已关闭Canvas的滚动条,并使用FB.Canvas.setSize(...)手动通知我的IFRAME中高度更改的父页面。由于我不允许访问父级中的ScrollTop()值,因此我的解决方法是将叠加层的顶部相对于源缩略图的顶部进行定位。这使叠加层靠近源,但它并不理想,特别是如果缩略图靠近视口的底部。
有什么方法可以将弹出窗口从IFRAME的顶部放置20个像素,但不知何故考虑到父窗口的(禁止的)ScrollTop()位置?
这似乎是一种相当普遍的情况;我希望Facebook计划在未来解决这个问题。 FB.Canvas.getPageInfo 对象看起来像是一个很好的候选对象。它有一个scrollTop成员,但它适用于Canvas,而不是父框架,如果关闭滚动条,则此值始终为零。
答案 0 :(得分:5)
因此,事实证明原生FB.Canvas.getPageInfo()方法正是我想要它一直做的事情。我添加了一些代码来从我的Facebook应用程序(http://apps.facebook.com/ipredikt)中秘密调用它,它返回了我需要正确定位弹出窗口和叠加层的值。下次我们将新位推送到Azure时,我将更新我的定位代码以考虑来自FB.Canvas.getPageInfo()的值。