window.close() не работает на iOS

Я открываю новое окно с помощью window.open(), чтобы перенаправить пользователей на страницу входа в oauth. Однако после успешного входа в систему, когда пользователь перенаправляется обратно в мое приложение, предыдущее окно с вызовом window.open не закрывается в ios.

На iPad это закроет не то окно, а на iPhone оно вообще не закроется. Код прекрасно работает на Android и на настольных версиях Chrome и Firefox.

После долгих разговоров я нашел исправление (опубликовано ниже). Если у кого-то есть идеи получше или причины, пожалуйста, напишите здесь.

2 ответа

Решение

После некоторых поисков я нашел этот твит, который публикует обходной путь - https://twitter.com/#!/gryzzly/statuses/177061204114685952 от @gryzzly

Скопировано здесь полностью

window.close() не работает на iOS после window.open()ing или target="_blank"? do setTimeout(window.close, timeout); где время ожидания> 300.

Это наряду с удалением .focus() в котором я сосредотачиваюсь на родительском окне перед тем, как закрыть новое окно, полностью решенная проблема для меня.

Вот что я закончил тем, что начал работать...
никогда не мог заставить функцию window.close работать; даже в setTimeout, как показано выше

Я проверил это на:
Windows XP: Chrome20, Firefox12, IE8
Android пряник: Android-браузер
Android Ice Cream: Android-браузер, Firefox
Ipad: браузер по умолчанию (я предполагаю, что его сафари)
Iphone 3gs и 4s: по умолчанию


<SCRIPT LANGUAGE=\"JavaScript\">
    function refresh() {
        var sURL = unescape("http://(some web page)/");
        window.location.replace(sURL);
    }
    function closeWindow() {
        var isiPad = navigator.userAgent.match(/iPad/i) != null;
        var isiPhone = navigator.userAgent.match(/iPhone/i) != null;
        if (isiPad || isiPhone) {
           setTimeout( \"refresh()\", 300 );
        } else {
           window.close();
        }
    }
</SCRIPT>

...... и HTML-код.......

<p><input class="bigbutton" type="button" name="cancel" id="cancel" value="Cancel" onClick="closeWindow()"></p>

Ios 12ã € 13 ОК

<p>If the page stops. Please press the button below to continue.</p>
<input id="button" name="button" type="submit" value="Close">

<script>
  var ua = window.navigator.userAgent;

  if (ua.indexOf('iPhone ') > 0) {  
    document.querySelector('#button').addEventListener('click', function (event) {
      event.preventDefault();
      window.close();
    }, false);

    document.querySelector('#button').click();
  } else {
    window.close();
  }
</script>
Другие вопросы по тегам