我需要使用自定义协议将页面重定向到 URL,以打开本地应用程序。重定向完成并调用应用程序后,需要使用
window.close()
函数关闭页面。
如果重定向的协议无法识别,或者用户明确允许该协议,则浏览器(不是我的代码)会弹出警告,通知无法识别的协议并要求用户确认打开应用程序。
用户还可以选择单击“始终允许”(明确同意)以防止下次出现警告弹出窗口。
我原来的代码是这样的:
<html>
<head>
<script src="https://code.jquery.com/jquery-3.7.1.slim.js"
integrity="sha256-UgvvN8vBkgO0luPSUl2s8TIlOSYRoGFAX4jlCIm9Adc=" crossorigin="anonymous"></script>
</head>
<script>
$(document).ready(function () {
window.location = "custom_app_protocol://commands/goto?some_parms";
window.close();
});
</script>
<body>
Redir test.
</body>
</html>
如果未显示警告弹出窗口(协议已识别或已明确同意),上面的代码可以正常工作。然后,调用应用程序并关闭页面。
但是,如果出现警告弹出窗口,页面将关闭而不执行应用程序调用。
一个选项是在通话后包含超时:
$(document).ready(function () {
window.location = "custom_app_protocol://commands/goto?some_parms";
setTimeout(function () {
window.close();
}, (5000));
});
但是,如果用户在超时触发页面关闭命令之前没有点击警告弹出窗口,则页面将在不打开应用程序的情况下关闭。
所以,我的问题是:有没有办法仅在警告弹出窗口关闭后执行
window.close()
?
试试这个:
$(document).ready(function() {
$(document).on("focus", function() {
window.close();
});
window.location = "custom_app_protocol://commands/goto?some_parms";
});
“选择应用程序”对话框将焦点从窗口中移开。当用户做出选择时,窗口将重新获得焦点,然后您将其关闭。
我在本地尝试过,似乎效果很好,不确定是否会覆盖某些边缘情况,但你可以尝试。