source - La recarga de la ubicación de la ventana de Facebook Javascript SDK no funciona en Firefox
no compatible source was found for this media firefox (5)
Estoy construyendo un sitio web con Facebook Connect y, por lo tanto, utilizando el Javascript SDK de Facebook. Problema: cuando se usa Firefox, la página no se recarga correctamente una vez iniciada o cerrada sesión.
FB.Event.subscribe(
''{% if current_user %}auth.logout{% else %}auth.login{% endif %}'',
function(response){
window.location.reload();
});
Obviamente, parece un problema conocido (simplemente escribe "la recarga de la ubicación de la ventana no funciona en Firefox" y obtendrás muchos resultados)
Más precisamente, Firefox no parece enviar la cookie correcta al volver a cargar la página ...
- Cuando hago clic para iniciar sesión, una vez que Facebook me registra y establece una cookie, Firefox no envía ninguna cookie
- Cuando hago clic para cerrar la sesión, una vez que Facebook me ha desconectado y elimina la cookie, Firefox envía la cookie que estaba allí anteriormente.
Concluyo que usa algunas "funciones de caché".
Traté de hacer una solución como se describe aquí y lo implementé:
redirect_url = encodeURIComponent(window.location.href);
url = window.location.href + "account/login?redirect_url=" + redirect_url;
window.location.replace(url);
Pero el problema persiste (el caché, supongo ...) ¿Puedes ayudarme con esto?
Gracias.
Intente redirigir a una URL diferente cada vez:
top.location.href = ''https://apps.facebook.com/YOUR_APP_NAME/?t='' + <?php echo time(); ?>;
, Uso PHP pero puede reemplazarlo con JS (Math.round (+ new Date () / 1000), supongo).
Estamos utilizando la solución de problemas con
window.location.href = url;
en lugar de
window.location.replace(url);
Funciona bien en Firefox, también.
Intente ajustar la llamada a window.location.reload () en un setTimeout () con un retraso de cero. Aparentemente, Firefox dispara el evento antes de configurar la cookie. El envoltorio debe colocar la llamada de recarga en la cola de eventos y permitir que las cookies se configuren correctamente.
En caso de que haya más confusión sobre esto, para Firefox, el ejemplo de setTimeout()
funciona perfectamente. Simplemente incluya su llamada de recarga, o si es más fácil simplemente reemplace:
document.location.reload();
con:
setTimeout(''document.location.reload()'',0);
Utilizando la versión más reciente de Firefox lanzada, he probado todos los ejemplos anteriores, y este es el único que realmente ha funcionado de manera consistente. Básicamente, solo necesitas "pausar" el JavaScript por un momento para dejar que el resto del script se ponga al día. No probé esto en Chrome o IE, pero funciona sin problemas en Firefox.
Para cualquiera que use Rails y Koala, puede verificar las cookies y redireccionar a la misma acción si no están presentes:
def fb_authenticate
@fb_cookies ||= Koala::Facebook::OAuth.new.get_user_info_from_cookie(cookies)
if @fb_cookies
#login user or create new user
else
redirect_to :controller => ''account'', :action => ''fb_authenticate''
end
end