iPad Safari IOS 5 window.close () закрывает неправильное окно - PullRequest
9 голосов
/ 03 ноября 2011

У нас есть приложение для iPad, которое работает на наших старых iPad.

Мы открываем внешние ссылки, используя var x = window.open (url)

в конце дня, когдаПользователь закрывает эту часть приложения, мы проходим через все окна, которые оно открыло, и делаем x.close () для каждого, и все хорошо.

Тестирование на новом iPad с IOS 5 и прекрасными вкладкамиОткрытие новых окон (хотя теперь они открываются как вкладки) - это нормально, но выполнение x.close () не обязательно закрывает x, оно может закрывать окно y или z.Выполнение x.focus () или y.focus () работает нормально, правильная вкладка фокусируется, но при закрытии кажется, что нужно просто выбрать любую вкладку.

Это ошибка или я делаю что-то не так?Пример программы:

<html>
<head></head>
<body>
    <script>
        //The openWindow array will hold the handles of all open child windows
        var openWindow = new Array();
       var win1;
       var win2;
        //Track open adds the new child window handle to the array.
        function trackOpen(winName) {
            openWindow[openWindow.length]=winName;
        }

        //loop over all known child windows and try to close them.  No error is
        //thrown if a child window(s) was already closed.
        function closeWindows() {
            var openCount = openWindow.length;
            for(r=openCount-1;r>=0;r--) {
                openWindow[r].close();
            }
        }

        //Open a new child window and add it to the tracker.
        function open1() {
            win1 = window.open("http://www.yahoo.com");
            trackOpen(win1);
        }

        //Open a different child window and add it to the tracker.
        function open2() {
            win2 = window.open("http://www.google.com");
            trackOpen(win2);

        }
        //Open whatever the user enters and add it to the tracker
        function open3() {
            var newURL = document.getElementById("url").value;
            var win3= window.open(newURL);
            trackOpen(win3);
        }

    </script>
    <input type="button" value="Open 1" onclick="open1()">
    <input type="button" value="Open 2" onclick="open2()">
    <input type="button" value="Focus 1" onclick="win1.focus()">
    <input type="button" value="Focus 2" onclick="win2.focus()">
    <input type="button" value="Close 1" onclick="win1.close()">
    <input type="button" value="Close 2" onclick="win2.close()">

    URL: <input type="text" id="url"> <input type="button" value="Open URL" onclick="open3()">
    <input type="button" value="Close All" onclick="closeWindows()">

</body>
</html>

Ответы [ 3 ]

3 голосов
/ 02 августа 2012

Это помогло мне (iPad 2 и 3; 3 с iOS 5.1.1)

var host=window.opener;
window.focus(); /* solves the iPad3 problem */
window.close(); /* the actual closing we want to achieve... */
/* makes the focus go back to opener on iPad2, fails silently on iPad3 */
try { host.focus(); } catch(e) {} 
1 голос
/ 10 апреля 2012

Установить фокус на окно перед его закрытием

0 голосов
/ 23 мая 2012

У меня тоже была такая же проблема.Мой исходный код будет сосредоточен на родительском окне, а затем закроет текущее.Это всегда заканчивается закрытием неправильного окна.Я удалил вызов .focus и добавил небольшую задержку в window.close (), и это сработало для меня.Первоначальный источник для предложения задержки - https://twitter.com/#!/gryzzly/statuses/177061204114685952

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...