javascript - 从链接启动应用程序,如果没有应用程序,则从网络下载应用程序

标签 javascript mobile web hyperlink launch

因此,我希望在登陆网页时启动移动应用程序。我已经看到了这一切,一切都很好(参见下面的代码,以 Facebook 和 Pandora 为例)。但我正在寻找一种逻辑检查来根据应用程序的成功或不成功启动以一种或另一种方式路由用户。在之前的解决方案中说过,您不能使用链接来检查用户的移动设备以查看是否安装了应用程序,但我一直认为可能有一种方法可以查看用户的应用程序是否在之后成功启动-事实并基于此路由它们。

使用下面的代码,如果应用程序启动,网页就会消失,如果你愿意(在应用程序占据中心位置时消失在后台)。但是,如果该应用程序没有安装在移动设备上,那么网页会保持打开状态并且您会收到错误消息(无法立即记忆是哪个错误)。但在我看来,收到此错误应该能够触发重新路由到您选择的特定 URL。不是在服务器级别,而是在代码级别。换句话说......如果应用程序启动,那么恭喜......享受!但是,如果页面加载时出现错误,那么它会立即重定向到 Apple 或 Google 上的应用程序下载页面(取决于检测到的操作系统)。

有人对如何实现这一点有建议吗?本质上是一段代码,它正在寻找触发错误并对此使用react,作为 A)从页面加载(链接)启动应用程序 B)在浏览器中打开应用程序商店以下载应用程序(如果应用程序不是) t 成功启动。

这是我第一次涉足 Stack,但多年来我发现社区非常有帮助。

<script type="text/javascript"> // <![CDATA[
var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};



if ( isMobile.Android() ) {
    document.location.href = "fb://profile";
}
else if(isMobile.iOS())
{
    document.location.href="pandora://";
}
</script>

最佳答案

你所说的在应用链接方面被称为延迟深度链接。如果您正在编写一个想要使用它的应用程序,则有 iOS 指南和 Android 指南。总体而言,所有场景都有 doesn't seem to be a standard implementation,但是,有一个非常简单的“自己动手”实现,类似于您正在尝试的实现。

(from another SO answer)

<script type="text/javascript">
    window.onload = function() {
        // Deep link to your app goes here
        document.getElementById("l").src = "my_app://";

        setTimeout(function() {
            // Link to the App Store should go here -- only fires if deep link fails
            window.location = "https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
        }, 500);
    };
</script>
<iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>

正如上面的评论员所说,使用 iframe 以便即使您的 window.location 失败,您也可以继续处理代码。然后,设置一个具有合理回退时间的简单 setTimeout。您不需要捕获任何错误消息或响应 header 。如果应用程序没有启动,那么网站就会启动。

关于javascript - 从链接启动应用程序,如果没有应用程序,则从网络下载应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773614/

相关文章:

javascript - 如何在 php 中使用用 javascript 语言声明的 for 循环变量

html - 如何选择或选择或使用移动日期选择器

java - 如何为 JSP 或 Servlet Web App 设置图标

asp.net-web-api - 是否可以以编程方式将 Reddit 帖子嵌入页面中?

javascript - 这种固定的图片滚动怎么做?

javascript - 如何调用 html 元素的触发器更改事件

javascript - setInterval 和clearInterval 问题?

php - Facebook 连接 - 手机

java - 在连接PC的移动设备上读写数据

java - 在 Spring 中为 RestTemplate 客户端抛出 ResourceAccessException vs HttpClientErrorException