简体   繁体   English

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

[英]iPad Safari IOS 5 window.close() closing wrong window

We have an iPad application that's working on our older iPads. 我们有一个iPad应用程序正在我们的旧iPad上工作。

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

at the end of the day, when the user closes this part of the app, we go through all the windows it opened and do x.close() for each one and everything is okie dokie. 在一天结束时,当用户关闭应用程序的这一部分时,我们会浏览它打开的所有窗口并为每个窗口执行x.close(),一切都很好。

Testing on the new iPad with IOS 5 and the lovely tabs, opening the new windows (although now they open as tabs) is fine, but doing x.close() doesn't seem to necessarily close x, it may close window y or z. 使用IOS 5测试新iPad和可爱的选项卡,打开新窗口(虽然现在它们以标签打开)很好,但是x.close()似乎不一定关闭x,它可能关闭窗口y或ž。 Doing x.focus() or y.focus() works just fine, the correct tab comes into focus, but close seems to just pick whatever tab it wants. 执行x.focus()或y.focus()工作正常,正确的选项卡成为焦点,但关闭似乎只是选择它想要的任何选项卡。

Is this a bug or am I doing something wrong? 这是一个错误还是我做错了什么? Example program: 示例程序:

<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>

That did the trick for me (iPad 2 and 3; 3 with iOS 5.1.1) 这对我来说很有用(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) {} 

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

I had the same issue as well. 我也有同样的问题。 My initial code would focus on the parent window and then close the current one. 我的初始代码将关注父窗口,然后关闭当前窗口。 This always ends up closing the wrong window. 这总是会关闭错误的窗口。 What I did was to remove the .focus call and added a small delay to the window.close() and it worked for me. 我做的是删除.focus调用并向window.close()添加一个小延迟,它对我.focus Original source for the delay suggestion - https://twitter.com/#!/gryzzly/statuses/177061204114685952 延迟建议的原始来源 - https://twitter.com/#!/gryzzly/statuses/177061204114685952

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM