2010-06-09 15 views
10

He reducido mi página a lo más simple posible, y todavía no funciona en IE8.¿Cómo puedo obtener el nuevo Javascript SDK de Facebook para trabajar en IE8?

Aquí está toda la página html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en"> 
<head></head> 
<body> 
<div id="fb-root"></div> 
<fb:login-button></fb:login-button> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({appId: 'd663755ef4dd07c246e047ea97b44d6a', status: true, cookie: true, xfbml: true}); 
    FB.Event.subscribe('auth.sessionChange', function(response) { 
    alert(JSON.stringify(response)); 
    }); 
    FB.getLoginStatus(function (response) { alert(JSON.stringify(response)); }); 
</script> 
</body> 
</html> 

en Firefox, Safari y Chrome (en un Mac), consigo el comportamiento espero: si no estoy conectado a Facebook, aparece un diálogo en la carga de la página con una sesión vacía. Cuando hago clic en el botón Iniciar sesión e ingreso, obtengo un segundo diálogo con una sesión. Si estoy conectado a Facebook, obtengo dos cuadros de diálogo con sesiones: uno de la llamada getLoginStatus y otro del evento.

En IE8, no obtengo ningún cuadro de diálogo cuando cargo la página. La devolución de llamada getLoginStatus no se invoca. Cuando hago clic en el botón Iniciar sesión, aparece un cuadro de diálogo, pero tiene un muy extraño error en ella:

Argumento no válido

La cruz-dominio URL receptor Facebook Connect (http://static.ak.fbcdn.net/connect/xd_proxy.php#?=&cb=f3e91da434653f2&origin=http%3A%2F%2Fmysiteurl.com%2Ff210cba91f2a6d4&relation=opener&transport=flash&frame=f27aa957225164&result=xxRESULTTOKENxx) debe tener la aplicación Connect URL (http://mysiteurl.com/) como un prefijo . Puede configurar la URL de Connect en el Editor de configuraciones de aplicaciones .

He desinfectado la URL de Connect anterior, pero es correcta.

El cuadro de diálogo tiene campos de nombre de usuario/contraseña. Si inicio sesión, el cuadro de diálogo se redirecciona a mi URL de conexión, pero no hay ninguna cookie fb, por lo que, por supuesto, nada funciona.

¿Qué estoy haciendo mal aquí?

actualización (2010 10 de septiembre):

Este problema no es universal. La URL de mi sitio tiene un número de puerto, porque es mi sitio de prueba: http://mysiteurl.com:12345. Sin un número de puerto , ie8 parece estar bien. Con el número de puerto, continúa fallando como lo hizo antes. Sin embargo, el mensaje de error es ahora más concisa:

Argumento no válido

URL dado no está permitido por la configuración de la aplicación

Además, este problema es específico de IE (en realidad, sospecho es específico para el transporte flash XD, pero no sé cómo confirmarlo). Funciona bien en cualquier otro par de plataforma/navegador que he probado.

Todavía no estoy más cerca de hacer que esto funcione con una url con un número de puerto.

+0

Si olfatea el tráfico, ¿puede ver alguna diferencia? ¿Y en qué etapa aparecen? –

+0

Buena pregunta. Las diferencias son bastante grandes. Facebook en IE aparentemente usa flash para proporcionar un canal de comunicaciones, lo que no es cierto para los otros navegadores que analicé de cerca. Algo en el mecanismo de flash aparentemente no funciona bien. – archbishop

+0

Cuando todas sus sospechas apuntan al hecho de que está tratando de usar un puerto que no sea 80, ¿por qué no probarlo en el puerto 80? Use un subdominio como test.yoursite.com vinculado al puerto 80 –

Respuesta

0

Ellos REALMENTE debe publicar esto. Pero cuando trabaje en su servidor local en un puerto aleatorio, por ejemplo 8080, TIENE que usar 127.0.0.1 y NO localhost o de lo contrario no funcionará en IE. Asegúrate también de que tu URL de conexión en la configuración de la aplicación Facebook esté configurada en 127.0.0.1

+0

Esta no es una respuesta a la pregunta, ni siquiera un "yo también". Es un problema completamente diferente. Estoy usando un puerto real en un host real. – archbishop

+0

Luché con esto todo el día. Basado en esta publicación, publiqué mi sitio de muestra en un nombre de dominio de muestra (no localhost o 127.0.0.1) y funcionó en IE8. Eso fue realmente frustrante. Esperando ver los registros de Fiddler mañana por la mañana. Uhg. – a7drew

0

He estado jugando con mi código durante horas tratando de resolver esto. Mi situación es un poco diferente, pero creo que puede ser el mismo problema:

Cada vez que iba a ejecutar comandos bajo la función FB.Event.Subscribe, IE8 ejecutaría toda mi mando antes del evento de disparo en realidad había cambiado (por ejemplo, cuando se suscribió a 'auth.login', la función cb se ejecutaría antes de que el usuario ingresara su nombre de usuario y contraseña). Por supuesto, mis funciones de devolución de llamada dependían de los datos necesarios después de el usuario había iniciado sesión.

Pruebo en IE, Firefox y Chrome, e IE es el único navegador que me da problemas. Yo también hago que mi sitio de prueba se ejecute en un puerto distinto a 80, pero aún no he probado diagnósticos específicos para identificar el problema, aunque estoy bastante seguro de que se relaciona con esto.

Esperemos que esto ayude a cualquier persona con problemas similares al menos tenga en cuenta otros posibles problemas. ¡Espero encontrar una respuesta o una solución pronto!

-1

Tuve el mismo problema aquí con IE. Funciona bien en Firefox y Chrome. Pero luego lo descubrí.

En su configuración de aplicación de Facebook, en la pestaña Sitio web, estoy seguro de que tiene "URL del sitio" completada, pero ahora debe completar el campo "Dominio del sitio" debajo y funcionará para IE.

No sé POR QUÉ sin ese campo todavía funciona para navegadores que no sean IE, no tiene ningún sentido al final de Facebook.

0

Si su problema solo ocurre cuando ejecuta su sitio en un puerto diferente al puerto 80, entonces tiene la respuesta: solo ejecútelo en el puerto 80. Las variantes de esta pregunta/problema aparecen una y otra vez con el desarrollo de aplicaciones de Facebook donde las personas ejecutan su prueba o sitio de desarrollo en un puerto que no sea el puerto 80. Man up y ejecútelo en el puerto 80!

No es como si fuera a ejecutar en un puerto diferente en producción, por lo que su entorno de prueba imita la producción.

¿Tiene alguna razón legítima para ejecutar un número de puerto alternativo? Realmente no es difícil en absoluto para ejecutar tantos sitios como desea que todos en el puerto 80.

Cuestiones relacionadas