Diálogo centrado en la aplicación de lienzo de Facebook

¿Cómo puedo crear un cuadro de diálogo que permanezca centrado mientras el usuario se desplaza por mi aplicación de lienzo de Facebook?

he leído este publicar sobre el tema, pero el método descrito allí (escuchar el evento de Facebook no documentado) no funcionó para mí.

preguntado el 12 de junio de 12 a las 16:06

¿Has intentado simplemente usar CSS position:fixed? -

Bueno, siempre puede intentar reemplazar la escucha del evento no documentado con un intervalo simple en el que verifica la posición de desplazamiento de forma permanente y adapta la posición de sus diálogos a ella. -

1 Respuestas

Parece que Facebook ya no sondea el servidor para actualizar la información de la página como parte de su biblioteca. Sin embargo, es bastante simple escribir algo que lo sondee usted mismo y mover el cuadro de diálogo de manera adecuada:

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);
};

Nota: he usado setTimeout en lugar de setInterval, ya que no sabe cuánto tardarán las llamadas ajax y no quiere manejar respuestas desordenadas.

Respondido el 12 de junio de 12 a las 18:06

Gracias por su respuesta. Supongo que esto funcionaría, pero el diálogo solo se centraría al mismo ritmo que se realizó el sondeo, ¿correcto? - Soroush Hakami

sí, desafortunadamente debido a las restricciones entre dominios, esta es la única forma de hacerlo. Es imposible acceder a la posición de desplazamiento de la ventana y al desplazamiento del iframe directamente usando JS desde dentro del iframe de su aplicación. - Simon hewitt

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.