Всплывающее окно заблокировалось при создании в jQuery ajax обратный вызов успеха

Google Chrome, кажется, блокирует всплывающее окно, которое я создаю с помощью jQuery. После некоторого расследования это, кажется, проблема с вызовом window.open в событии успеха вызова ajax. Существует ли путь вокруг этого? Мой jQuery ajax вызов возвращает URL, который будет открыт. Таким образом, я - застрявший бит.

Это работает, если я помещаю window.open вне вызова ajax; но, внутри (т.е. в событии успеха) это заблокировано. Я думаю, что это - что-то, чтобы сделать с КОНТЕКСТОМ, но я не уверен.

Вот то, что я имею:

     window.open("https://www.myurl.com");  // OUTSIDE OF AJAX - no problems 
                                            // with popup

     $.ajax({
        type: "POST",
        url: "MyService.aspx/ConstructUrl",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            // Normally loads msg.d which is the url returned from service
            // static url below is for testing
            window.open("https://www.myurl.com");  // THIS IS BLOCKED
        },
        error: function(msg) {
            // alert(error);
        }
    });
12
задан Lee 23 October 2019 в 09:31
поделиться

2 ответа

Просто откройте новое окно в обратном вызове успеха:

 $.ajax({
    type: "POST",
    url: "MyService.aspx/ConstructUrl",
    data: jsonData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        window.open("https://www.myurl.com"); 
    },
    error: function(msg) {
        //alert(error);
    }
});

Обратите внимание, что для этого может потребоваться установить для параметра async $ .ajax значение false, иначе код, следующий за вызовом $ .ajax, может быть оценивается до получения ответа.

8
ответ дан 2 December 2019 в 04:03
поделиться

Firefox блокирует всплывающие окна на основе события, которое вызывает запуск кода javascript; например, это позволит открывать всплывающее окно, которое было вызвано onclick , но не тем, которое было вызвано setTimeout . С годами, когда рекламодатели пытались обойти блокировщик всплывающих окон Firefox, он стал немного сложнее.

2
ответ дан 2 December 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: