30

好的。我正在尝试登录推特。此代码中未打开窗口。收到警报的响应不为空,并且是指向登录屏幕的链接。有任何想法吗?

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

    }

}
4

2 回答 2

62

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

您可以通过临时更改浏览器的弹出窗口阻止(将其关闭)来验证正在发生的情况,然后查看它是否开始工作。

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

于 2012-08-06T01:36:13.277 回答
11

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

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));
于 2017-10-11T08:03:01.737 回答