Facebook Canvas IFRAME должен получить значение ScrollTop () родительской страницы - PullRequest
0 голосов
/ 04 июня 2011

Я сразу скажу, что знаю, что это невозможно из-за ограничений безопасности , но вот мой сценарий, и я ищу творческие обходные пути , которые я не могурассмотреть.

У меня есть веб-сайт, который отображает эскизы изображений.Когда пользователи нажимают на миниатюры, я использую элемент управления наложением jQuery (FaceBox) для отображения полноразмерного изображения во всплывающем окне.Верхняя часть всплывающего окна всегда расположена в 20 пикселях от верхней части страницы, поэтому необходимо прочитать значение scrollTop () страницы.

Эта функция прекрасно работает, когда я получаю прямой доступ к своему сайту.Но когда я загружаю сайт из приложения Facebook Canvas в IFRAME , мой код позиционирования для всплывающих окон прерывается.Я отключил полосы прокрутки для Canvas и использую FB.Canvas.setSize (...), чтобы вручную уведомить родительскую страницу об изменениях высоты в моем IFRAME.Так как мне не разрешен доступ к значению ScrollTop () в родительском объекте, мой обходной путь заключается в размещении верхней части наложения относительно верхней части исходного эскиза.Это сохраняет наложение близко к источнику, но вряд ли идеально, особенно если миниатюра находится близко к нижней части области просмотра.

Есть ли способ разместить всплывающее окно в 20 пикселях от верхней частиIFRAME, но как-то принять во внимание (запрещенное) расположение ScrollTop () родительского окна?

Это похоже на довольно распространенный сценарий;Я надеюсь, что Facebook планирует решить эту проблему в будущем.Объект FB.Canvas.getPageInfo выглядит хорошим кандидатом для этого.Он имеет элемент scrollTop, но он предназначен для Canvas, а не для родительского фрейма, и если полосы прокрутки отключены, это значение всегда равно нулю.

1 Ответ

5 голосов
/ 13 июня 2011

Итак, получается, что нативный метод FB.Canvas.getPageInfo () делает именно то, что я хотел, чтобы он делал все это время. Я добавил некоторый код, чтобы тайно вызывать его из моего приложения Facebook (http://apps.facebook.com/ipredikt)), и он вернул значения, необходимые для правильного размещения всплывающих окон и наложений. В следующий раз, когда мы добавим новые биты в Azure, я обновлю свое позиционирование код для учета значения из FB.Canvas.getPageInfo ().

...