pushState停留在同一页面上

时间:2012-11-05 22:03:44

标签: html5 routing pushstate

我正试着用HTML5 pushState来解决问题。它看起来很棒。我可以添加状态,回到我的浏览器,一切都很好。但是,当我刷新页面时,它会导致404,因为附加了pushState的URL实际上并不存在......

我正在尝试从包含index.html页面的单个文件夹加载所有内容,因此该网址看起来像http://www.server.com/app_name/<something>app_name是一个带有index.html的文件夹文件)。

据我所知,hashbang被认为是坏的,所以什么pushState URL可以/我应该使用哪个将保留在同一个实际页面上并允许我刷新?

刷新后,我还能恢复状态吗?

P.S。我并不关心没有启用javascript或保持向后兼容性的浏览器。我不想更改任何.htaccess规则,以使其便携且无配置。

2 个答案:

答案 0 :(得分:0)

您的问题是您的网络服务器尝试在 app_name 文件夹中找到名为 something 的文件。您必须做的是将所有请求路由到/ app_name / *到index.html,然后使用DOM的location对象设置适当的应用程序状态。

如果不告诉服务器它应该做什么,你就不会走得太远。这就是History API的重点。如果您不想弄乱.htaccess文件,您可能应该使用mod_rewrite或sth编辑Web服务器的配置(Apache?)。那样的。

答案 1 :(得分:0)

我最终放弃了pushState,而是使用了BBQ jQuery插件。

代码看起来像这样:

$(document).ready(function() {
  // making sure a hashchange event is triggered for refresh
  $(window).trigger('hashchange');
});

// this gets called on any page change, back button etc                                                                                                                                                                                                                                             
$(window).bind( 'hashchange', function(e) {
  // the fragment contains a hash value at the
  // end of the url, e.g. #xyz
  var url = $.param.fragment();
  // simulating a click on the appropriate link on the page
  // based on the fragment
  $('.panel a[href="#' + url + '"]').click()
});

页面上的网址采用以下格式:

<a href="#xyz">link to xyz</a>