2010-05-03 78 views
8

我在从iframe中进行OpenID工作时遇到了一些麻烦。OpenID和Iframes

基本上我加载了主页上的一些重手的内容,我想在系统中建立一个日志,其中页面不需要重新加载(从而重新加载所有内容)。我从使用堆栈交换网站的方式爱上了OpenID,并将其相对较好地整合到了其他项目中。

我觉得要做我想做的事我想尝试和使用iframe(因为新窗口让我哭),但是我偶然发现了某种形式的障碍,接近中间的某个地方以及我的生活想不通怎么回事...

基本上我有一个jQuery的形式产生的DIV和OpenID的形式,似乎工作动态加载的iframe。沿着这些线:

<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> 

并据我所知,这一切工作正常。

我的问题就在我重新定向到OpenID的远程站点(再次用JS做沿着这些路线:)

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

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

    function delayer() { 

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

} 

setTimeout('delayer()', 3000) 

</script>"; 

抱歉,这是一个有点长篇大论,但这里是我的问题(最终):这对我尝试过的一些OID网站很有效,但也有一些给我带来了问题:Google根本无法加载,雅虎和mySpace在iframe中打开,然后立即将整个窗口重定向到主页, OID页面和wordpress分别返回一个错误。

我假设这是一个阻止我窃取登录细节(这不是我想要实现顺便说一句,因此序言)的地方采取的措施,这就够公平了,但仍然血腥加重。

是这里有什么事,我做retardedly,有没有一些办法解决这,如果没有上述情况,是我唯一的其他选项来创建新窗口或建立自己的登录/注册。

如果你已经得到了这个答案,非常感谢你的时间,并且我希望你不会太在意拼写错误。

回答

6

尝试在弹出窗口(window.open或< A HREF = “” TARGET = “登陆”>)上运行您的登录。这种方式window.top ==窗口,使网站不会iframed。然后当你回到自己的身边,你可以发送一个授权cookie和一个<脚本> self.close()</script>

+0

欢呼的家伙,但我试图避免弹出窗口,因此iframe。我的问题更多地基于为什么这不会发生在我身上,因此我可以绕过它。 – Phood 2010-05-03 22:49:04

+3

不幸的是,由于开放ID提供者的限制,我很确定他们都会在iframe中打开或重定向到页面之外的页面,以防止邪恶的JS能够绑定到页面。 – gnarf 2010-05-03 22:56:20

+0

这就是那个frickin悲剧......不像我想象的那样开放! – Phood 2010-05-03 23:19:59