Подтвердить что ты не робот

Javascript window.open не работает

Ok. Я пытаюсь войти в твиттер. Окно не открывается в этом коде. Ответ, который получает предупреждение, не является нулевым и является ссылкой на экран входа в систему. Любые идеи?

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

    }

}
4b9b3361

Ответ 1

Стандартная логика всплывающего блока, содержащаяся в большинстве браузеров в эти дни, блокирует любые вызовы window.open(), которые не являются прямым результатом действия пользователя. Код, который запускается таймерами или любым асинхронным обратным вызовом (например, ваша функция готовности ajax), будет обрабатываться как НЕ вызванный непосредственно действиями пользователя, и новое всплывающее окно обычно будет заблокировано.

Вы можете убедиться, что это происходит из-за временного изменения блокировки всплывающих окон браузера (отключение) и увидеть, что он затем начинает работать.

Вероятно, что вам нужно сделать в качестве рабочего процесса, это создать окно при действии пользователя, которое запустило этот поток кода, а затем поместить содержимое в окно, когда вы получите ответ ajax. Возможно, это позволит браузер. Я знаю, что менее желательно с визуальной точки зрения, но вы можете поместить некоторый временный контент в окно, пока не появится ответ ajax (что-то вроде "loading..." ).

Ответ 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));