我在iframe中使OpenID工作时遇到了一些麻烦。
基本上我在主页面上加载了一些重型内容,我想构建一个登录系统,其中页面不需要重新加载(因此再次重新加载所有内容)。我使用堆栈交换网站爱上了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根本不会加载,Yahoo并且ifSpace在iframe中打开正常,然后立即将整个窗口重定向到主页和OID页面,并且wordpress返回错误。
我假设这是一个反制措施,以阻止我窃取登录详细信息(这不是我想要实现顺便说一句,因此序言),这很公平,但仍然血腥加重。 / p>
这里有什么东西我做得很迟钝,有什么方法围绕这个,如果上述两者都不是我唯一的其他选择来创建新窗口或建立我自己的登录/注册。
如果你有这么远,非常感谢你的时间,我希望你不要太在意拼写错误。
答案 0 :(得分:6)
尝试在弹出窗口中运行登录(window.open或&lt; a href =“”target =“login”&gt;)。这样window.top == window使得网站不会被iframed。然后当你回到自己的身边时,你可以发送一个身份验证cookie和一个&lt; script&gt; self.close()&lt; / script&gt;