iPad Safari IOS 5 window.close()关闭错误的窗口

时间:2011-11-02 21:37:23

标签: javascript ipad mobile-safari

我们的iPad应用程序正在使用我们较旧的iPad。

我们使用打开外部链接 var x = window.open(url)

在一天结束时,当用户关闭应用程序的这一部分时,我们会浏览它打开的所有窗口并为每个窗口执行x.close(),而且一切都很好。

使用IOS 5和可爱标签测试新iPad 打开新窗口(尽管现在它们以标签打开)很好,但是做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 个答案:

答案 0 :(得分:3)

这对我有用(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 :(得分:1)

在关闭窗口之前将焦点设置在窗口上

答案 2 :(得分:0)

我也有同样的问题。我的初始代码将关注父窗口,然后关闭当前窗口。这总是会关闭错误的窗口。我做的是删除.focus调用并向window.close()添加一个小延迟,它对我有用。延迟建议的原始来源 - https://twitter.com/#!/gryzzly/statuses/177061204114685952