window.close()在iOS上不起作用

时间:2012-05-23 03:05:01

标签: javascript ios iphone ipad chrome-ios

我用window.open()打开一个新窗口,将用户重定向到oauth登录页面。但是,在成功登录后,当用户被重定向回我的应用程序时,带有window.open调用的上一个窗口不会在ios中自行关闭。

在iPad上,它会关闭错误的窗口,在iPhone上它根本不会关闭窗口。该代码适用于Android和桌面版Chrome和Firefox。

经过多次考虑后,我找到了一个修复程序(在下面发布)。如果有人有任何更好的想法或根本原因,请在此处发布。

3 个答案:

答案 0 :(得分:6)

这是我最终上班的原因...... 从来没有得到window.close函数工作;甚至在如上所示的setTimeout中

我测试了这个:
Windows XP:Chrome20,Firefox12,IE8
Android姜饼:android浏览器
Android冰淇淋:android浏览器,Firefox
Ipad:默认浏览器(我假设它的safari)
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>

答案 1 :(得分:5)

经过一番搜索后,我发现此推文发布了一个解决方法 - https://twitter.com/#!/gryzzly/statuses/177061204114685952来自@gryzzly

完整复制

  在window.open()或之后,

window.close()在iOS上不起作用   TARGET = “_空白”? do setTimeout(window.close,timeout);超时&gt;   300。

这与在关闭新窗口之前删除我关注父窗口的.focus()一起完全解决了我的问题。

答案 2 :(得分:0)

ios 12、13 OK

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