用于导航独立Web应用程序的脚本会干扰注销链接

时间:2013-09-22 20:10:25

标签: javascript ruby-on-rails session iphone-standalone-web-app

我在我的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的哪些部分可能导致此错误或我如何解决此问题将不胜感激。

1 个答案:

答案 0 :(得分:0)

遵循最小化的脚本有点困难,但我会咬人。

该脚本看起来像是为了阻止链接正常工作,而是使用javascript重定向document.location.href=clicked_link.href

狂野猜测:您的“退出”链接是使用https协议提供的,但此scrpt会在不更改协议的情况下重定向。或者,也许,它不是真正的链接,而是类似<a href="javascript:void(0)">的事件,其中包含事件监听器document.location=javascript:void(0)和繁荣,页面未找到。