当用户访问某个 URL 时,我们正在尝试启动我们的本机应用程序。
我们的应用程序已经注册了一个自定义 URL 架构,因此这部分已经完成。
问题是实现回退。
我想要的是这样的:
try {
# Redirect to the app
} catch(e) {
# Redirect to the web version
}
这显然不起作用,因为window.location
不会引发异常。
我试过这样做:
window.location = 'some-schema://some/url';
setTimeout(function() { window.location = '/some/url'; }, 100);
当用户访问 URL 时,它会打开应用程序。但是,当用户返回浏览器时,会执行回退代码并且用户会看到 Web 版本。
这只是一个缺点。下次用户访问该 URL 时,由于某种未知原因,应用程序无法打开(仅在 android 上测试)。由于我们不使用 301 重定向,我不明白为什么它会缓存重定向。
我几乎放弃了,并且很可能会实现一个视图,即“如果您有应用程序,请单击此处,否则请单击此处”。
在您询问之前,我无法从 Web 版本打开应用程序,因为它纯粹是用 JS 编写的,并且会window.location
中断 ajax 请求和图像加载。