0

我在application.html.erb中使用以下JavaScript以允許我的Web應用程序在從Safari保存到主屏幕時的行爲類似於iOS應用程序。該腳本可以防止開口於應用程序的鏈接在Safari:用於導航獨立Web應用程序的腳本干擾退出鏈接

<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應用程序而不是主屏幕時,不會出現這種情況,然後點擊'Sign out'按鈕 - 它按照預期行事並簽署用戶(通過'delete'刪除會話' 方法)。

任何想法什麼部分的JavaScript可能會導致此錯誤,或者我可以如何解決這個問題將不勝感激。

回答

0

這是一個很難遵循最小化的腳本,但我會咬。

該腳本看起來像是爲了阻止鏈接正常工作,而不是使用JavaScript重定向document.location.href=clicked_link.href。猜測:您的「註銷」鏈接使用https協議提供,但此scrpt重定向而不更改協議。或者,也許它不是一個真正的鏈接,而是像<a href="javascript:void(0)">這樣的事件監聽器,在這種情況下document.location=javascript:void(0)和繁榮,頁面未找到。

+0

感謝您的回答帕維爾。我不認爲我的鏈接使用https協議,所以這可能不是問題。此外,它是一個鏈接'/ signout',通常映射到Rails DELETE方法(即,'/ signout'匹配:'sessions#destroy',通過::delete)。無論如何,我將在明天上班前與我的前端人員覈對。將更新,當我有更多的信息。再次感謝! – stewartmccoy