0

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

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

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

刷新后,我还能找回状态吗?

ps 我不关心没有启用 javascript 或保持向后兼容性的浏览器。我不想更改任何.htaccess规则以使其可移植且无需配置。

4

2 回答 2

0

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

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

于 2012-11-05T22:16:09.953 回答
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()
});

页面上的 URL 采用以下格式:

<a href="#xyz">link to xyz</a>
于 2012-11-09T22:31:35.750 回答