Javascript iPad Safari IOS 5窗口。关闭()关闭错误窗口

Javascript iPad Safari IOS 5窗口。关闭()关闭错误窗口,javascript,ipad,mobile-safari,Javascript,Ipad,Mobile Safari,我们有一个iPad应用程序,可以在我们的旧iPad上运行 我们使用 var x=窗口打开(url) 在一天结束时,当用户关闭应用程序的这一部分时,我们会检查它打开的所有窗口,并对每个窗口执行x.close(),一切正常 在配备IOS 5和可爱标签的新款iPad上进行测试, 打开新窗口(尽管现在它们以选项卡的形式打开)是可以的,但是执行x.close()似乎并不一定要关闭x,它可能会关闭窗口y或z。执行x.focus()或y.focus()操作效果很好,正确的选项卡进入焦点,但close似乎只是选

我们有一个iPad应用程序,可以在我们的旧iPad上运行

我们使用 var x=窗口打开(url)

在一天结束时,当用户关闭应用程序的这一部分时,我们会检查它打开的所有窗口,并对每个窗口执行x.close(),一切正常

在配备IOS 5和可爱标签的新款iPad上进行测试, 打开新窗口(尽管现在它们以选项卡的形式打开)是可以的,但是执行x.close()似乎并不一定要关闭x,它可能会关闭窗口y或z。执行x.focus()或y.focus()操作效果很好,正确的选项卡进入焦点,但close似乎只是选择它想要的任何选项卡

这是一个错误还是我做错了什么?示例程序:

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

//openWindow数组将保存所有打开的子窗口的句柄
var openWindow=新数组();
var-win1;
var-win2;
//“轨迹打开”将新的子窗口句柄添加到数组中。
函数trackOpen(winName){
openWindow[openWindow.length]=winName;
}
//循环所有已知的子窗口并尝试关闭它们。没有错误
//如果子窗口已关闭,则引发。
函数closeWindows(){
var openCount=openWindow.length;
对于(r=openCount-1;r>=0;r--){
openWindow[r].close();
}
}
//打开一个新的子窗口并将其添加到跟踪器。
函数open1(){
win1=窗口。打开(“http://www.yahoo.com");
trackOpen(win1);
}
//打开其他子窗口并将其添加到跟踪器。
函数open2(){
win2=窗口。打开(“http://www.google.com");
trackOpen(win2);
}
//打开用户输入的任何内容并将其添加到跟踪器
函数open3(){
var newURL=document.getElementById(“url”).value;
var win3=window.open(newURL);
trackOpen(win3);
}
网址:

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

我也有同样的问题。我的初始代码将集中在父窗口上,然后关闭当前窗口。这总是导致关闭错误的窗口。我所做的是删除了
.focus
调用,并在window.close()中添加了一个小延迟,这对我很有效。延迟建议的原始来源-

为我做了这件事(iPad2和3;iOS5.1.1版的iPad3)


你知道怎么解决这个问题了吗?没有,我只是在代码到期前几天发布的。我们告诉客户端我们无法实现该功能:-/不幸的是,代码在某些地方已经有window.close(),并导致了一个可爱的生产问题,通常这并不能完全解决它,至少在iOS 5.1中,在删除它之前必须单击该选项卡。try-catch语句无效:最后一行应该是
try{host.focus();}catch(e){}
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) {}