防止后退和前进按钮在单页面应用程序中重新加载页面

时间:2015-11-05 15:38:46

标签: javascript jquery html

我有一个单页应用,其中页面永远不会被卸载。我正在使用URL中的#并使用javascript来检测hashchange,然后使用JS和AJAX更新UI ...我希望前进和后退按钮发出额外请求服务器。

目前,用户最初第一次访问该网站时,会发出服务器请求(可以)

Processing by MyController#index as HTML

我的目标是这个服务器请求只在用户在网站上的时间发生一次......每次他们点击任何其他链接时,我只使用"#"在网址中,以防止新的服务器请求...所以我所有的" a"标签看起来像这样

<a href="#page1/

我遇到的问题是点击后退和前进按钮会触发我的JS hashchange监听器(这就是我想要的)......但它也会调用

Processing by MyController#index as HTML //I DO NOT WANT THIS TO HAPPEN 

以下是我目前正在使用的功能

1。)用户导航到mydomain.com

2。)&#34;由MyController处理#index为HTML&#34;启动并发出服务器请求(这没关系)

3.。)用户点击链接,现在网址读取mydomain.com/#page1,我用JS更新视图(这是正常的)

4。)用户点击链接,现在网址读取mydomain.com/#page2,我用JS更新视图(这是正常的)

5.。)用户点击BACK,现在网址读取mydomain.com/#page1,我用JS更新视图(这是正常的)

6。)服务器请求自动重新加载页面(&#34;处理MyController #index,因为HTML&#34;再次调用)(这是确定)

当用户点击后退按钮时,如何阻止步骤6发生?...我只是希望更改网址并让我通过JS更新我的UI并且没有服务器请求

另外,如果这有帮助的话,我在轨道上使用ruby。

3 个答案:

答案 0 :(得分:1)

你想做的事情是不可能的。您无法覆盖浏览器按钮的默认行为,如后退/前进/停止/刷新等。

您可以做的是创建自己的后退和前进按钮(并将它们放置在实际页面上) - 并相应地编写其事件处理程序以进行AJAX调用。

答案 1 :(得分:0)

这对我来说很好 jQuery hashchange event

答案 2 :(得分:0)

终于弄明白了。出于某种原因,只要单击后退或前进按钮,Turbolinks就会重新加载页面。我从应用程序中删除了Turbolinks gem,现在它的工作完美了。