【发布时间】:2015-01-24 22:30:18
【问题描述】:
我有一个网页,我们称之为entry.html。
当用户进入此页面时,javascript 代码(见下文)正在尝试将用户深层链接到本机 iOS/Android 应用。
如果深层链接失败(可能是设备上没有安装应用程序),用户应该“退回”到另一个页面——我们称之为fallback.html。
这是在 entry.html 上运行的 javascript 代码:
$(function(){
window.location = 'myapp://';
setTimeout(function(){
window.location = 'fallback.html';
}, 500);
});
这是一种标准的深度链接方法,全网推荐;尝试深度链接,如果超时触发,则表示深度链接没有发生 - 所以回退。
只要在设备上安装了应用程序,它就可以正常工作。
但如果未安装应用程序,这是尝试深度链接时的行为:
Mobile Safari:我看到一条警告消息说“Safari 无法打开此页面...”,然后它正确回退到 fallback.html- 这是预期的行为.
移动 Chrome 是我的问题。
当未安装应用程序时,浏览器实际上被重定向到 myapp:// url,这当然是无效的 - 所以我得到一个“未找到”页面,并且不会发生回退。
最后-我的问题是:
如何修复我的代码,以便在移动 Chrome 上也会发生回退?就像移动版 Safari 一样?
注意:我看到 LinkedIn 移动网站可以正确执行此操作,无论是否安装了应用程序,Safari 和 Chrome,但我无法追踪负责它的代码:(
注意 2:我尝试附加 iframe 而不是 window.location = url,这仅适用于 Safari,即使安装了应用,移动 Chrome 在附加 iFrame 时也不会进行深度链接。
谢谢大家!
更新:
我找到了一个不错的解决方案,并回答了我自己的问题。请参阅我的解决方案接受的答案。
【问题讨论】:
-
这里有一个类似的问题stackoverflow.com/questions/5679918/…
-
@AlexKey 谢谢。但这并不能回答我的问题。未安装应用程序时如何处理移动Chrome?
-
这是一个后续帖子,请注意阅读作者不知道的有关 http 链接的 cmets:aawaara.com/post/88310470252/…
-
@AlexKey 我会检查并尽快更新。谢谢
-
嘿@geevee。我建议将所有这些抽象到分支服务 (branch.io) 中——我参与的一个项目。分支链接为您处理所有这些复杂性,并根据浏览器选择正确的方法。您选择的答案的问题在于选择器。用户这样做很烦人,人们经常放弃。如果您使用 Chrome 中的意图和 Firefox/默认浏览器/其他的其他机制,它将无缝打开应用程序。
标签: javascript mobile-website deep-linking mobile-chrome