重定向到自定义协议 URL 后防止 window.close

问题描述 投票:0回答:1

我需要使用自定义协议将页面重定向到 URL,以打开本地应用程序。重定向完成并调用应用程序后,需要使用

window.close()
函数关闭页面。

如果重定向的协议无法识别,或者用户明确允许该协议,则浏览器(不是我的代码)会弹出警告,通知无法识别的协议并要求用户确认打开应用程序。

enter image description here

用户还可以选择单击“始终允许”(明确同意)以防止下次出现警告弹出窗口。

我原来的代码是这样的:

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

javascript html browser
1个回答
1
投票

试试这个:

$(document).ready(function() {
    $(document).on("focus", function() {
        window.close();
    });
    window.location = "custom_app_protocol://commands/goto?some_parms";
});

“选择应用程序”对话框将焦点从窗口中移开。当用户做出选择时,窗口将重新获得焦点,然后您将其关闭。

我在本地尝试过,似乎效果很好,不确定是否会覆盖某些边缘情况,但你可以尝试。

© www.soinside.com 2019 - 2024. All rights reserved.