Javascript window.open无法正常工作

时间:2012-08-05 23:31:01

标签: javascript ajax twitter window.open

确定。我正在尝试登录Twitter。此代码中的窗口未打开。获得警报的响应不为空,并且是指向登录屏幕的链接。有什么想法吗?

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

    }

}

2 个答案:

答案 0 :(得分:42)

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

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

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

答案 1 :(得分:8)

刚刚遇到了同样的问题。以防您想要修复它的代码。我用过这个:

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