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);
}
});
Просто откройте новое окно в обратном вызове успеха:
$.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, может быть оценивается до получения ответа.
Firefox блокирует всплывающие окна на основе события, которое вызывает запуск кода javascript; например, это позволит открывать всплывающее окно, которое было вызвано onclick
, но не тем, которое было вызвано setTimeout
. С годами, когда рекламодатели пытались обойти блокировщик всплывающих окон Firefox, он стал немного сложнее.