2010-05-03 23 views
8

Tengo un pequeño problema para hacer trabajo OpenID desde un iframe.OpenID y Iframes

básicamente tengo cargado algo de contenido pesado en la página principal y quiero construir un sistema de inicio de sesión en el que no sea necesario volver a cargar la página (y así volver a cargar todo ese contenido). Me enamoré de OpenID al usar sitios web de intercambio de pila, y lo he integrado relativamente bien en otros proyectos.

Tengo ganas de hacer lo que quiero hacer Me gustaría probar y usar un iframe (porque las nuevas ventanas me hacen llorar), sin embargo he tropezado con algún tipo de obstáculo en algún lugar cerca del medio y por mi vida no se puede saber qué está pasando ...

básicamente tengo un formulario en un formulario DIV y openID generado por jQuery que parece funcionar para cargar dinámicamente un iframe. algo en esta línea:

<script type="text/javascript"> 
contentboxs = 0; 
function contentbox() { 
     if (contentboxs == 0){ 
     $('#mainpage').append("<div id='contentbox'><div style='clear:both;' id='oritext'></div><div id='f_content'><iframe src ='' name='framedcontent' width='580' height='600' scrolling='false'></iframe></div></div>"); 
     $('#f_content').hide(); 
     contentboxs++; 
     } else { 
     $('#contentbox-wipe').remove(); 
     $('#contentbox').remove(); 
     contentboxs--; 
     } 
    } 

function loginpanel(){ 
     contentbox(); 
     if (contentboxs == 1){ 
      $('#oritext').append("<form method='post' action='login.php' name='oidform' target='framedcontent'>Please Select your OpenID Provider: <br/><input type='text' name=\"id\" id='openidbox' /><br /><input type='submit' name='submit' value='Log In' onclick='loginsubmit();' ></form>"); 
     } 
    } 
function loginsubmit() { 
    $('#oritext').html(''); 
    $('#contentbox').animate({'height':'600px', 'width':'700px', 'margin-top' : '-300px', 'margin-left' : '-350px'},500, 'linear', function() { $('#f_content').show(); }); 

} 
</script> 
<a href='javascript:loginpanel();'>login</a> 

y por lo que puedo decir que todo funciona bien.

mi problema viene en mi nueva dirección a los sitios remotos OpenID (nuevamente haciendo con JS lo largo de estas líneas :)

echo("<div><p><center>Redirecting...</center></div>"); 

    echo "<script type='text/javascript'> 

    function delayer() { 

this.location = '".$url."' 

} 

setTimeout('delayer()', 3000) 

</script>"; 

siento que es un poco largo aliento, pero aquí es mi problema (por fin): esto funciona bien para algunos de los sitios OID que he probado, pero algunos me están dando problemas: Google no se carga en absoluto, Yahoo y mySpace se abren bien en el iframe y luego redirigen instantáneamente la ventana completa a la página de inicio y la página OID respectivamente, y wordpress devuelve un error.

Supongo que se trata de una medida contraria para evitar que roben los datos de inicio de sesión (eso no es lo que estoy tratando de lograr, por lo tanto, el preámbulo), y eso es justo, pero todavía sangriento.

¿Hay algo aquí que estoy haciendo con retraso, hay alguna forma de evitar esto, y si ninguna de las anteriores, es mi única otra opción para crear ventanas nuevas o construir mi propio inicio de sesión/registro.

Si ha llegado hasta aquí, muchas gracias por su tiempo, y espero que no le hayan importado demasiado los errores ortográficos.

Respuesta

6

Intente ejecutar su inicio de sesión en una ventana emergente (window.open o < a href = "" target = "login">). De esta manera ventana window.top == tal que los sitios no serán iframed. Luego, cuando regreses a tu lado, puedes enviar una cookie de autenticación y una secuencia de comandos <> self.close() </script>

+0

, pero estoy intentando evitar las ventanas emergentes, de ahí el iframe. Mi pregunta se basa más en por qué esto no me está sucediendo y cómo puedo evitarlo. – Phood

+3

Lamentablemente, estoy bastante seguro de que debido a las restricciones establecidas por los proveedores de ID abiertos, todos van a romper el iframe o redirigirlo a la página fuera de los marcos para evitar que el malvado JS pueda unirse al páginas. – gnarf

+0

bueno, eso es malditamente trágico ... ¡no tan abierto como pensé entonces! – Phood