【问题标题】:What's the recommended way to rebuild a page from the browser history? (History.js+Rails 3)从浏览器历史记录重建页面的推荐方法是什么? (History.js+Rails 3)
【发布时间】:2011-09-07 21:47:48
【问题描述】:

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

所以让我们假设用户执行以下操作:

1) 在浏览器中输入http://mydomain.com/users/12

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

3) 输入http://google.com

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

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

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

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

坏主意?好主意?

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    这是我修复它的方法:

      #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
    

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 2017-01-11
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多