【问题标题】:How can I detect if an app is installed on an android device from within a web page如何从网页中检测应用程序是否安装在 android 设备上
【发布时间】:2011-09-27 21:56:41
【问题描述】:

情况如下:

我的网页需要通过 JavaScript 检查我的应用是否已安装在当前运行的 android 设备上。

如果安装了应用程序,页面将显示一个链接(带有自定义协议)以启动应用程序, 否则该页面应显示指向 android 市场的链接。

我可以管理应用程序和市场的链接。唯一剩下的步骤是从 JavaScript 代码中检测设备上是否存在应用程序(或者尝试捕获可能的协议不受支持的错误,作为不存在应用程序的指示)。

当我

  1. 点击网页链接
  2. 我的自定义应用协议和
  3. 该应用尚未安装在设备上

我可以看到 android 环境生成“协议不受支持”类型错误。 不幸的是,我无法在 JavaScript 代码中捕获该错误以将用户转移到 android 市场。

我猜直接检测和错误检测都是有效的方法,如果它们存在的话。

有什么想法可以实现吗?

感谢您的帮助。

【问题讨论】:

    标签: javascript android detect


    【解决方案1】:

    不要使用自定义协议。

    相反,设置您的 <intent-filter> 以监视已知 URL(例如,设置方案、主机和路径)。该 URL 应指向您的“下载应用”说明所在的页面。

    然后,如果用户从其他地方单击指向知名 URL 的链接,它会启动您的应用(如果已安装),否则将显示您的网页。

    【讨论】:

    • 我认为这并不能完全解决问题。问题在于 如何 检查应用程序是否通过 javascript 安装在移动设备上。当网页需要在按钮上显示“下载”或“打开”文本时,可能需要它。
    • @YTerle:出于明显的隐私和安全原因,您想要的都是不可能的。
    【解决方案2】:

    我也有同样的问题,但我是这样解决的:

    var ua = navigator.userAgent.toLowerCase();
    var isAndroid = ua.indexOf("android") > -1;
    if(isAndroid) { // if is android
        // your app address for local
        var ifrSrc = 'intent://example.com#Intent;scheme=my_scheme;action=android.intent.action.VIEW;end';
        var ifr = document.createElement('iframe');
        ifr.src = ifrSrc ;
        ifr.onload = function() { // if app is not installed, then will go this function
            window.location = 'http://your.app_download_page.com';
        };
        ifr.style.display = 'none';
        document.body.appendChild(ifr);
    
        setTimeout(function(){
            document.body.removeChild(ifr); // remove the iframe element
        }, 1000);
    } else { // if is not android
        window.location = 'http://google.com';
    }
    

    希望这可以帮助可能遇到此问题的人。

    【讨论】:

    • 很好的解决方案,和我一起工作我只将 ifrSrc 更新为“myscheme=myhosts”它在三星旧的原生浏览器上失败了
    【解决方案3】:

    您可以使用 src url 是应用程序的自定义协议的 iframe,同时如果未处理自定义协议,您可以显示您的网页。您还可以使用 frameborder="0" 和 width 和 height = 0 将 iframe 设置为不可见;

    【讨论】:

    • 如何检查自定义协议是否未处理(未安装应用)
    • 你不能,但你加载自定义协议并在几秒钟后加载市场。如果协议被处理,则页面被应用程序覆盖并关闭,否则,两秒钟内没有任何反应,然后页面重定向到市场。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2019-05-17
    • 2021-09-25
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多