2012-06-12 3 views
1

Как создать диалог, который остается центрированным, когда пользователь прокручивает мое приложение для холста Facebook?Центрированный диалог на Facebook canvas app

Я прочитал сообщение this на эту тему, но метод, описанный там (прослушивание недокументированной facebook-event), не работал для меня.

+0

Вы пробовали использовать CSS-позицию: исправлено? – CBroe

+0

Да, это не работает. –

+0

Ну, вы всегда можете попытаться заменить прослушивание недокументированного события простым интервалом, в котором вы постоянно проверяете положение прокрутки и приспосабливаете свое положение диалогов к нему. – CBroe

ответ

3

Похоже, что Facebook больше не проводит опрос на сервере, чтобы обновить страницуInfo как часть их библиотеки. Тем не менее, это довольно просто, чтобы написать что-то, что опросы это самостоятельно, и соответствующим образом переместить диалог:

var timeout; 
var positionDialog = function(){ 
    FB.Canvas.getPageInfo(function(pageInfo){ 
     $("#dialog").animate({top: Math.max(parseInt(pageInfo.scrollTop) - parseInt(pageInfo.offsetTop) + 
      ((parseInt(pageInfo.clientHeight)-$("#dialog").outerHeight())/2), 0)}, 100); 
     timeout = setTimeout(positionDialog, 250); 
    }); 
}; 

var showDialog = function(){ 
    // show your dialog 
    $("#dialog").show(); 
    positionDialog(); 
}; 

var hideDialog = function(){ 
    $("#dialog").hide(); 
    clearTimeout(timeout); 
}; 

Примечание: Я использовал SetTimeout, а не setInterval, так как вы не знаете, как долго Аякса звонки будут принимать , и не хотят обрабатывать ответы не в порядке.

+0

Спасибо за ваш ответ. Думаю, это сработает, но диалог будет сосредоточен только на том же уровне, что и опрос, правильно? –

+0

Да, к сожалению, из-за ограничений перекрестного домена это единственный способ сделать это. Невозможно получить доступ к позиции прокрутки окна и смещению iframe напрямую с помощью JS из iframe вашего приложения. –

+0

СПАСИБО ВАС !!!!!! –

Смежные вопросы