Javascript window.open不工作

问题描述:

好的。我试图登录到Twitter。该代码中未打开该窗口。获得警报的响应不为空,并且是到登录屏幕的链接。有任何想法吗?Javascript window.open不工作

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 2012-08-05 23:33:27

包含在这些日子将阻止不属于用户操作的直接结果window.open()任何电话大多数浏览器标准的弹出窗口阻止程序逻辑。由定时器或任何异步回调触发的代码(如您的ajax就绪函数)将被视为不是由用户操作直接引起,并且新的弹出窗口通常会被阻止。

您可以通过临时更改浏览器的弹出窗口阻止(关闭它)并查看它开始工作来验证这是发生了什么。

作为解决方法,您可能需要做的是在启动此代码线程的用户操作时创建窗口,然后在获得ajax响应时将内容放入窗口中。浏览器可能会允许。我知道从视觉的角度来看这并不理想,但您可以在窗口中放置一些临时内容,直到出现ajax响应(类似于“loading ...”)。

+7

非常有用!点击'window.open'创建一个窗口,然后将它传递给你的回调函数,在这个回调函数中'mywindow.location = someurl' – lajarre 2014-01-16 11:54:28

刚刚有这个完全相同的问题。以防万一你想要修复它的代码。我用这个:

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