【问题标题】:Javascript window.open not workingJavascript window.open 不起作用
【发布时间】:2012-08-02 23:52:34
【问题描述】:

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

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

    }

}

【问题讨论】:

  • 如果window.open与用户事件(键盘、鼠标)无关,大多数浏览器会阻止它。

标签: javascript ajax twitter window.open


【解决方案1】:

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

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

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

【讨论】:

  • 非常有用!使用window.open 创建一个点击窗口,然后将其传递给您的回调,您将在其中执行mywindow.location = someurl
  • 当我需要触发另一个 ajax 请求时该怎么办?除非通过用户操作完成,否则它无法正常工作。
  • @MihaiBratulescu - 为了让我们帮助您,您必须发布您自己的问题并显示您自己的代码。浏览器不会通过用户操作阻止 ajax 调用,因此这部分没有意义。我们不在这里讨论。如果您需要进一步的帮助,请发布您自己的问题。
  • 哇。卡在这个问题上一段时间,因为它在与用户事件相关联时正在工作,但后来我将它移到 api 调用的响应块中,它停止工作并且没有注意到 chrome 中的小“弹出窗口被阻止”。很高兴我找到了这个,以为我在那儿丢了一会儿
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多