如何重定向到自定义URI方案,或在不支持的情况下显示一些内容?

Sch*_*aus 5 javascript php redirect http

简而言之:是否可以将访问者重定向到自定义URI方案,或者在不支持该方案的情况下显示一些内容?

我的特殊用例是,我正在创建一个注册了自定义URI方案的移动应用程序,以便用户可以通过SMS或电子邮件发送链接来邀请其他用户在应用程序中执行某些操作。

链接指向我的服务器(在Apache上运行PHP),服务器将访问者重定向到适当的方案。只要重定向页面完成了所有工作,它就可以很好地工作,但是我希望能够显示一些内容,以防在未安装我的应用程序的计算机或其他设备上打开电子邮件。

我试图通过这些Javascript技巧以及在服务器上提供位置标头和PHP脚本中的内容来实现这一点。都不行。我也尝试<meta http-equiv="Location" content="myscheme://testing">在页面上使用标签,但这也没有任何作用。

有人建议使用用户代理嗅探来查看客户端是使用移动浏览器还是桌面浏览器。我已经在做这项工作以及初步检查,但是仍然可能在未安装我的应用的移动设备上打开链接,而这些人将被留空页面。

有什么方法可以做到这一点,还是我不走运?

Sch*_*aus 5

修改后的版本,原始版本在底部:

为了让事情变得快速和干净,我决定保留重定向页面。此外,我认为重定向页面不应保留在浏览器的历史记录中,以避免无休止的后退按钮惨败。因此我最终得到了这个版本:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Redirecting...</title>
    <script>
        var redirectToApp = function() {
            setTimeout(function appNotInstalled() {
                window.location.replace("http://example.com/app-not-installed");
            }, 100);
            window.location.replace("myscheme:someaction");
        };
        window.onload = redirectToApp;
    </script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

原答案:

经过一番摆弄后,我发现这实际上可以用 Javascript 实现。我只需要把它变得比我所拥有的更简单一点:

<!doctype html>

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Welcome to my app</title>
    <script>
        var redirectToApp = function() {
            document.location = 'myscheme:someaction';
        };

        window.onload = redirectToApp;
    </script>
</head>

<body>
You don't have the app installed.
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这正是我所需要的。不幸的是,当无法完成重定向时,它确实会在 Javascript 控制台中导致错误,但我想我只能忍受这一点。