我用 window.open() 打开一个新窗口,将用户重定向到 oauth 登录页面。但是,在成功登录后,当用户被重定向回我的应用程序时,带有 window.open 调用的前一个窗口不会在 ios 中自行关闭。
在 iPad 上它会关闭错误的窗口,而在 iPhone 上它根本不会关闭窗口。该代码在 Android 和桌面版本的 Chrome 和 Firefox 上运行良好。
经过大量的扎根,我找到了一个解决方法(发布在下面)。如果有人有更好的想法或根本原因,请在此处发布。
我用 window.open() 打开一个新窗口,将用户重定向到 oauth 登录页面。但是,在成功登录后,当用户被重定向回我的应用程序时,带有 window.open 调用的前一个窗口不会在 ios 中自行关闭。
在 iPad 上它会关闭错误的窗口,而在 iPhone 上它根本不会关闭窗口。该代码在 Android 和桌面版本的 Chrome 和 Firefox 上运行良好。
经过大量的扎根,我找到了一个解决方法(发布在下面)。如果有人有更好的想法或根本原因,请在此处发布。
经过一番搜索,我发现这条推文发布了一个解决方法 - https://twitter.com/#!/gryzzly/statuses/177061204114685952 by @gryzzly
全文复制到这里
在 window.open() 或 target="_blank" 之后,window.close() 在 iOS 上不起作用?做 setTimeout(window.close, timeout); 其中超时> 300。
这与.focus()
在关闭新窗口之前删除我专注于父窗口的 a 一起完全解决了我的问题。
这就是我最终开始工作的内容......
永远无法让 window.close 函数工作;即使在如上图的 setTimeout 中
我在以下设备上进行了测试:
Windows XP:Chrome20、Firefox12、IE8
Android 姜饼:Android 浏览器
Android Ice Cream: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>
ios 12、13 正常
<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>