Javascript 从浏览器启动Android应用程序:如何使用“检测”功能;“意图”;支持?
我们正在尝试为我们的应用程序构建一个参数化的入口网页,其中大约50%的用户将安装我们的应用程序,而50%的用户不会 最初,我们一直在使用一个专门的URL方案,我们的应用程序已经注册;即 myapp://dothing?specialParameters=5 然而,我们很难发现用户没有安装我们的应用程序,或者我们的应用程序的早期版本不支持URL方案。在Chrome或Android浏览器中,用户被导航到浏览器生成的错误页面,因为它找不到服务器 在iOS Safari和Android Firefox中,我们可以通过在导航前使用setTimeout来解决这个问题Javascript 从浏览器启动Android应用程序:如何使用“检测”功能;“意图”;支持?,javascript,android,google-chrome,android-intent,Javascript,Android,Google Chrome,Android Intent,我们正在尝试为我们的应用程序构建一个参数化的入口网页,其中大约50%的用户将安装我们的应用程序,而50%的用户不会 最初,我们一直在使用一个专门的URL方案,我们的应用程序已经注册;即 myapp://dothing?specialParameters=5 然而,我们很难发现用户没有安装我们的应用程序,或者我们的应用程序的早期版本不支持URL方案。在Chrome或Android浏览器中,用户被导航到浏览器生成的错误页面,因为它找不到服务器 在iOS Safari和Android Firefox中
function timeoutFn() {
var timeout = setTimeout(function() {
window.location = //iOS Appstore location;
}, 1000);
window.addEventListener("pagehide", function(evt) {
clearTimeout(timeout);
});
window.location = "myApp://dothing?specialParameters=5";
}
我的Chrome/Android浏览器解决方案是使用谷歌推荐的意向系统,如下所述:
我已经对此进行了测试,它实际上似乎工作得很好——然而,Firefox不知道如何处理以“intent://”开头的链接。我们仍然可以在Firefox上使用上面的JavaScript函数,但我不太愿意开始为它编写用户代理嗅探代码,特别是因为我认为Android上的任何其他web浏览器都可能同样缺乏意图支持
因此,回到标题问题:Chrome和Android浏览器能够通过“intent://”链接打开应用程序-是否有任何方法,使用JavaScript或类似的方法,使用功能检测来找到这种支持?这是我们目前使用的,然而,这远不是理想的
function isItentsSupported() {
var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (isChrome) {
var version = parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10);
return version >= 25;
} else {
return false;
}
}
Chrome版本号基于所以,谷歌的规范是使用用户代理嗅探。我认为,相比之下,每一次事件都让微软看起来更加网络开放……不,规范没有说要使用代理嗅探(我已经更新了我的答案,让它更清晰)。我找不到任何其他方法来检测意图是否得到支持。