我在我的application.html.erb中使用以下javascript,以便在从Safari保存到主屏幕时,我的网络应用就像iOS应用。此脚本可防止应用程序中的链接在Safari中打开:
<script>(function(a,b,c){if(c in b&&b[c]){var d,e=a.location,f=/^(a|html)$/i;a.addEventListener("click",function(a){d=a.target;while(!f.test(d.nodeName))d=d.parentNode;"href"in d&&(d.href.indexOf("http")||~d.href.indexOf(e.host))&&(a.preventDefault(),e.href=d.href)},!1)}})(document,window.navigator,"standalone")</script>
效果很好,当应用程序保存到我的主屏幕时,除了“退出”按钮之外,所有导航都按预期工作,错误输出:
“您要查找的页面不存在。您可能输错了地址或页面可能已移动。”
当我从Safari而不是主屏幕访问Web应用程序时,这不会发生,然后我点击“退出”按钮 - 它按预期运行并签署用户(通过'删除'销毁会话法)。
任何想法javascript的哪些部分可能导致此错误或我如何解决此问题将不胜感激。
答案 0 :(得分:0)
遵循最小化的脚本有点困难,但我会咬人。
该脚本看起来像是为了阻止链接正常工作,而是使用javascript重定向document.location.href=clicked_link.href
。
狂野猜测:您的“退出”链接是使用https
协议提供的,但此scrpt会在不更改协议的情况下重定向。或者,也许,它不是真正的链接,而是类似<a href="javascript:void(0)">
的事件,其中包含事件监听器document.location=javascript:void(0)
和繁荣,页面未找到。