2012-08-05 3 views
12

Ok. 트위터에 로그인하려고합니다. 이 코드에서는 창이 열리지 않습니다. 경고를받는 응답은 null이 아니며 로그인 화면에 대한 링크입니다. 어떤 아이디어?자바 스크립트 창이 열리지 않습니다.

var url = "./twitter_login.php"; 
var con = createPHPRequest(); 

con.open("POST",url,true); 
con.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
con.send(""); 

var response = ""; 

con.onreadystatechange = function() { 

    if(con.readyState==4 && con.status==200) { 

     response = con.responseText;  
     alert(response); 
     window.open(response,"twitter","menubar=1,resizable=1,width=350,height=500");   

    } 

} 
+6

대부분의 브라우저가 사용자 이벤트 (키보드, 마우스)와 관련이없는 경우 'window.open'을 차단한다. – Zeta

답변

32

요즘은 사용자 작업의 직접적인 결과 없습니다 window.open()에 대한 호출을 차단합니다 대부분의 브라우저에 포함 된 표준 팝업 차단제 논리. 타이머 또는 비동기 콜백 (예 : AJAX 준비 함수와 같은)에 의해 트리거되는 코드는 사용자 작업에 의해 직접적으로 발생하지 않는 것으로 간주되며 새 팝업 창이 일반적으로 차단됩니다.

일시적으로 브라우저의 팝업 차단을 변경 (사용 중지) 한 다음 작동을 확인하면 문제가 없는지 확인할 수 있습니다.

은 아마 당신이로해야 할 일을 해결 방법이 코드 스레드를 시작하고 당신이 당신의 아약스 응답을받을 때 다음 창에 내용을 넣어 사용자 동작에 따라 창을 만드는 것입니다. 브라우저가 허용 할 것입니다. 시각적 관점에서는 그다지 바람직하지 않지만, Ajax 응답이 올 때까지 ("로딩 중 ..."과 같은) 임시 콘텐트를 창에 넣을 수 있습니다.

+7

놀랍도록 유용합니다! 'window.open'을 클릭하여 윈도우를 생성 한 다음, 콜백에 전달하여'mywindow.location = someurl'을 실행합니다. – lajarre

1

정확히 똑같은 문제가 있습니다. 만약 당신이 그것을 고쳐 코드를 원한다. 나는 이것을 다음과 같이 사용했다 :

newWindow = window.open("", "_blank"); 

request = $.ajax({ ... my request which returns a url to load ... }) 

request.done((function(_this) { 
     return function(data, textStatus, jqXHR) { 
      return newWindow.location = data.Url; 
     }; 
     })(this)); 
관련 문제