繁体   English   中英

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

[英]Preventing back and forward buttons from reloading the page in a single page app

我有一个页面应用程序,其中页面永远不会卸载。 我在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.)“启动MyController #index as HTML”处理并发出服务器请求(这没关系)

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

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

5.)用户单击BACK,现在url读取mydomain.com/#page1并用JS更新视图(这是正常的)

6.)服务器请求自动重新加载页面(“再次调用由MyController处理#index作为HTML”)(这不是正常的)

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

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

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

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

这个工作对我来说很好jQuery hashchange事件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM