...

среда, 30 октября 2013 г.

Как обойти PopUp blocker в браузере в асинхронных запросах

Проблема




Браузеры по политике безопасности разрешают открывать всплывающее окно, только, если пользователь непосредственно предпринял для этого какие-то действия. Например, этот код будет работать:

$("someElement").on("click", function(){
window.open("http://yandex.ru")
}






А теперь допустим, что нам надо сделать запрос к API, чтобы получить ссылку и только после этого открыть окно с этой ссылкой.

Таким образом, код уже не будет работать, тк окно уже открывается не по действию пользователя:

$.get("someURL").done(function(res){
window.open(res);
});


Соответственно можно решить задачу так:

1. Заранее получить нужную ссылку, но в таком варианте отпадает возможность передачи каких либо параметров по действию пользователя для формирования ссылки

2. сделать запрос синхронным, что не вариант

3. подумать получше


Третий способ




А что, если открыть окно заранее с пустой ссылкой, для юзабилити и радости глаз нарисовать в окне индикатор загрузки, а после того как ссылка будет сформирована подменить location?

Пробуем, все работает.


Собственно небольшой кусочек кода:



var win = window.open("", params)
//делаем красивости в win.document или втыкаем адрес открываем не пустую ссылку, а заранее заготовленную на сервере заглушку
$.get("someURL").done(function(res){
win.document.location = res;
});


Другие способы решения пишите в комментариях.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий