2010-05-03 4 views
8

iframe 내에서 OpenID를 사용하는 데 약간의 문제가 있습니다.OpenID 및 Iframe

기본적으로 나는 메인 페이지에로드 된 무거운 수작업 컨텐트를 가지고 있으며 페이지를 다시로드 할 필요가없는 시스템에 로그인을 구축하려고합니다 (따라서 모든 컨텐트를 다시로드해야합니다). OpenID가 스택 교환 웹 사이트를 사용하는 것을 좋아해서 다른 프로젝트와 비교적 잘 통합되었습니다.

나는 내가하고 싶은 일을하고 싶다. iframe을 사용하고 싶다. (새로운 창이 나에게 소리를 지르기 때문에), 그러나 나는 중간 근처와 어떤 삶의 장애물을 발견했다. 무슨 일이 벌어지고 일을 할 수 없다 ...

기본적으로 나는 동적으로 iframe을로드하려면 작동하는 것 같아요 jQuery 생성 된 DIV 및 openID 양식에 양식이 있습니다. 이 줄을 따라 뭔가 :

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

그리고 내가 말할 수있는 한이 모든 것이 잘 동작한다.

내 문제는 오픈 아이디 원격 사이트 (다시이 라인 :

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

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

    function delayer() { 

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

} 

setTimeout('delayer()', 3000) 

</script>"; 

죄송이 여기에 조금 긴 호흡이지만, 함께 JS와 함께 그 일을 내 다시 방향으로 제공하는 것은 결국 내 문제 (이다) : 이것은 내가 시도한 일부 OID 사이트에서 잘 작동하지만 일부는 문제를 일으키고있다. 구글은 전혀로드하지 않고, 야후와 mySpace는 iframe에서 잘 열어 전체 윈도우를 즉시 홈 페이지로 리다이렉션한다. OID 페이지 각각, 및 wordpress 오류를 반환합니다.

나는 이것이 로그인 정보를 훔쳐 가지 못하도록 막을 수있는 조치라고 가정합니다. (내가 btw를 달성하려고하는 것이 아니기 때문에 그 전제는 충분하지 않습니다.) 그리고 충분히 공평하지만 여전히 피투성이입니다.

나는 지체하게하고있다. 여기에 어떤 방법이 있겠는가? 그리고 위의 어느 쪽도 아니라면, 새 창을 만들거나 내 자신 만의 로그인/등록을 만드는 유일한 옵션이다.

시간을내어 주셔서 감사합니다. 맞춤법 오류가 너무 마음에 들지 않았 으면 좋겠습니다.

답변

6

팝업 창 (window.open 또는 < a href = ""target = "login">)에서 로그인을 실행 해보십시오. 이런 식으로 window.top == 창은 사이트가 iframe되지 않도록합니다. 그런 다음 자기가 돌아 왔을 때 auth 쿠키와 < 스크립트> self.close() </script>

+0

환호를 보낼 수는 있지만 팝업을 피하기 위해 iframe을 피하려고합니다. 내 질문은 이것이 나를 위해 일어나지 않는 이유와 그것을 어떻게 해결할 수 있는지에 더 근거합니다. – Phood

+3

슬프게도, 오픈 ID 공급자가 제정 한 제한 사항 때문에 iframe에 침입하거나 프레임 외부의 페이지로 리다이렉트하여 악의적 인 JS가 바인딩 할 수 없도록합니다. 페이지. – gnarf

+0

잘 그 frickin 비극 ... 내가 생각한만큼 열려 있지 않다! – Phood