2011-09-08 22 views
7

Estoy agregando el inicio de sesión de Facebook a mi aplicación asp.net existente. He agregado un botón de inicio de sesión de Facebook a mi pantalla de inicio de sesión. Ahora, hago clic en el botón de inicio de sesión de Facebook y en IE 9 arroja una excepción del lado del cliente en all.js en la línea 22: if(a.params)b.fbCallID=a.id;El inicio de sesión de Facebook arroja "Permiso denegado"

Incluso después de esa excepción veo la pantalla de inicio de sesión de Facebook y puedo acceder al navegador principal window Obtengo el evento auth.login, así puedo vivir con eso.

Pero, si ya estoy conectado a Facebook, llego a la página y hago clic en el botón de inicio de sesión de Facebook, veo brevemente la ventana emergente vacía, obtengo la misma excepción del lado del cliente y luego no aparece ningún evento en la ventana principal del navegador, así que no sé si el usuario inició sesión, así que no puedo redirigirlos a otra página.

Probé el truco channelUrl pero no sirvió.

¿Alguna sugerencia qué está pasando?

+0

posible duplicado de [Error Permiso denegado en all.js] (http://facebook.stackoverflow.com/questions/7280007/permission-denied-error-in- all-js) –

Respuesta

2

Encontré este truco que me solucionó el problema; añadir esta línea justo después de llamar FB.init():

// Hack to fix http://bugs.developers.facebook.net/show_bug.cgi?id=20168 for IE7/8/9 
FB.UIServer.setLoadedNode = function (a, b) { 
           FB.UIServer._loadedNodes[a.id] = b; 
          }; 
0

La razón por la que está sucediendo (de los sitios web y documentos que he leído, y créanme, he leído MUCHO) es que IE rechaza el JavaScript entre sitios, y ve el all.js como cruzar el arenero frontera. Se puede encontrar una buena discusión en here.

Algunas personas dicen que adding the channel.html file works, pero hemos probado todos los sabores de eso, y no hemos tenido ningún éxito. (Recuerde que el http o https deben coincidir con la página que envía la solicitud.)

Microsoft makes reference to this same issue y su consejo es agregar el sitio a sitios de confianza (eso no ayuda). El consejo anterior (del año pasado) es agregar CP="HONK" como su política de privacidad compacta, pero creo que ese error se corrigió y estaba relacionado con las cookies.

Lo que parece que nos está sucediendo es que el inicio de sesión continúa y la devolución de llamada se llama correctamente, pero el hilo principal que debe completarse fuera de la llamada de inicio de sesión deja de ejecutarse (debido al error). Por lo tanto, las funciones fuera del inicio de sesión no se pueden ejecutar después de la llamada de inicio de sesión.

Si alguien tiene alguna forma de que IE no genere la excepción o cree una solución para este problema, estoy desesperado por tenerla. Cualquier información necesaria Estaré encantado de proporcionarle, pero hay una muestra aquí:

enter code here 
code before login here... 
FB.login(function(response){ 
    callback stuff here... This part fires. 
}); 
main thread stuff here... This fails because of permission denied error. 
+0

¿A qué te refieres al hacer referencia al "hilo principal"? JS tiene un único subproceso y podría dejar de ejecutar el código si alcanza un cierto error. – Andrey

+0

En realidad, creo que podría estar en algo: ahora estoy usando solamente el evento onlogin del botón de inicio de sesión de Facebook, y parece funcionar bien para ambos casos cuando el usuario ya ha iniciado sesión en FB y cuando no. Aún recibo la excepción "Permiso denegado", pero no detiene la funcionalidad. Publicaré la solución aquí una vez que se haya probado y me aseguraré de que esté funcionando. – Andrey

+0

Javascript no es multiproceso como tal, pero las devoluciones de llamada imitan los subprocesos múltiples de alguna manera. La ejecución de lo que llamo el "hilo principal" (lo que viene después de la llamada FB.Login) se está deteniendo, pero aún así la devolución de llamada se ejecuta hasta su finalización. No estoy seguro de por qué, pero hemos verificado esto con alertas en el código. – MontyThreeCard