确定。我正在尝试登录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");
}
}
答案 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));