2012-01-14 90 views
4

我找了这个答案,找不到一个,我不知道它是否是一个bug,看起来浏览器对这个HTML5函数有不好的支持..使用history.replaceState更改url前状态

我只有铬和Firefox来测试。 (最新的稳定版本)。

$(function(){ 
if (window.history.state != null) $("#content").html(window.history.state.value); 
$(window).bind("beforeunload", function() { window.history.replaceState({ value:"remember me"}, "", document.location.href + "?param=rememberme"); }); 
}); 

试试吧。我试图在beforeunload上更改当前的url,所以我可以将数据信息保存在url中,以便当用户返回到页面时,他将使用已更改的url重新加载页面。

但在页面重新载入时表现奇怪。 首先在铬window.history.state甚至不存在(尚不支持?),所以无法在重新加载时获取状态。并在页面重新加载URL更改不记忆。 但是,如果你去另一个网站,回来的网址更改是remebered。

在firefox window.history.state存在,并在页面重新载入或历史向前/向后,状态被正确提取。但是URL更改在页面重新加载时不起作用,URL每2次重新加载都会正确更改。如果你前进/后退的URL更改将被正确处理。

任何人都知道如何使页面重新加载(F5)的代码正常工作,如果铬仍然不支持history.state? 页面重新载入行为是否正确,或者浏览器没有正确处理?

如果任何人都可以在Safari上测试它,我很想知道它是如何工作的。

就在那里测试代码:http://www.braikar.com/stuff/test.html

+0

它似乎每次都在Firefox中为我工作的很好,但在其他人(Safari,Opera,Chrome)中,它会更改历史记录中的URL,但不会将内容'记住我'添加到div中。在IE中它根本不起作用 - 那就不奇怪了! – ClarkeyBoy 2012-01-14 23:49:57

+0

需要注意HTML 5的一个很好的网站是http://html5test.com/ - 它看起来不像历史上的那么好,但还有很多其他的东西可能需要在某个时候知道。编辑:现在我明白了你每次第二次重新加载Firefox的意义,我只是在点击链接时才检查。 – ClarkeyBoy 2012-01-14 23:54:58

+0

我甚至不用IE来打扰..我期待它不会工作;)我正在制作一个cms系统,这就是为什么我只想了解这个历史行为是否正确或者它是否正确那些尚未实现的浏览器。根据https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history,行为应该在页面重新加载时正常工作,因为我在页面重新加载之前改变状态。 – Braikar 2012-01-15 13:18:48

回答

0

您是否尝试过使用Cookie来存储您的变量?您可以在启动前设置它并在加载时读取它。