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

Javascript window.open в сафари

У меня возникла проблема с открытием нового окна в сафари (как для ipad, так и для настольных версий), который вращается вокруг блокировщика всплывающих окон. В основном я обнаружил, что если window.open не вызывается из события click, сафари заблокирует всплывающее окно.

Событие, вызывающее window.open, в настоящее время изменено из списка.

Есть ли какой-либо способ, кроме переключения какого события мы обрабатываем, чтобы обмануть сафари, чтобы разрешить всплывающее окно в этом сценарии? (событие onchanged)

4b9b3361

Ответ 1

Я не думаю, что есть способ открыть новое окно в сафари для мобильных устройств, отличное от нажатия на кнопку. Обратите внимание на этот fooobar.com/questions/225557/..., который аналогичен. Я не уверен, что это сработает, но вы можете посмотреть нажатием кнопки программно с помощью функции jquery trigger().

Вы также можете посмотреть варианты отображения диалога на своей собственной странице, возможно, используя такие инструменты, как jquery ui.

НТН!

Ответ 2

В сафари есть глушитель блокировщика всплывающих окон, который не отображается, когда ссылка заблокирована.

Чтобы проверить, включен ли блокировщик всплывающих окон, перейдите в настройки сафари > безопасность > что-то вроде блокировки всплывающих окон.

Чтобы пересечь его простым способом, так как я не могу открыть новое окно, я показываю предупреждение, в котором всплывающее окно заблокировано.

В моем случае я использую select input для открытия внешних ссылок:

HTML

<select id="retailer" class="windowOpen retailer-submenu">
    <option value="null">Select one</option>
    <option value="http://amazon.com">Amazon</option>
    <option value="http://ebay.com">eBay</option>
</select>

Javascript

<script type='text/javascript'>
    $('select.windowOpen').change(function(){
        var url = $(this).val();

        var open = window.open(url);
        if (open == null || typeof(open)=='undefined')
            alert("Turn off your pop-up blocker!\n\nWe try to open the following url:\n"+url);
    });
</script>

Код для проверки блокировки всплывающего окна:

var open = window.open('http://google.com');
if (open == null || typeof(open)=='undefined')
    alert("Turn off your pop-up blocker!");

PS: триггер jquery не работал со мной.

Ответ 3

Вы можете справиться с этим, используя

document.location

вместо

window.open

С уважением, Vince