我正试着用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
规则,以使其便携且无配置。
答案 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>