Javascript window.open无法正常工作

问题描述 投票:17回答:2

好。我正在尝试登录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");        

    }

}
javascript ajax twitter window.open
2个回答
42
投票

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

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

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


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));
© www.soinside.com 2019 - 2024. All rights reserved.