从浏览器历史记录重建页面的推荐方法是什么? (History.js + Rails 3)

时间:2011-09-07 21:47:48

标签: javascript ajax ruby-on-rails-3 back-button

我的Rails 3应用程序中的许多页面都是由小部件组成的。例如,有一个带url / users / 12的用户页面调用用户控制器show动作。此页面加载Feed小部件,该小部件对feed控制器进行ajax调用,以便获取用户的所有feed项。

因此,假设用户执行以下操作:

1)进入浏览器http://mydomain.com/users/12

2)点击“今天的帖子”按钮,查看今天的帖子(这会触发对返回帖子的Feed控制器的ajax调用

3)输入http://google.com

处理浏览器历史记录和后退按钮的推荐方法是什么?

我想我需要做的是存储足够的状态信息,以便当用户点击后退按钮时,浏览器会加载用户/ 12页面,然后再次点击今天的过滤器按钮。实现这个的最佳方法是什么?

我可以存储一个指向要调用的函数的指针:

History.pushState({"function_name": "restoreUserHomePage"}, "", /users/12/feed?time=today);

不好主意?好主意?

注册stateChanged(HTML5中的popState)事件的“正确”方式是什么。可能我的每个页面都有一组不同的小部件。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题实际上是您的浏览器正在缓存xhr请求。因此,当您按下后退按钮时,它会加载.js格式,而不是您浏览器时的完整网址。

以下是我修复它的方法:

  #in application_controller
  before_filter :set_cache_buster  
  def set_cache_buster
    if request.xhr?
      response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
      response.headers["Pragma"] = "no-cache"
      response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
    end
  end