【问题标题】:Change url/state on beforeunload using history.replaceState使用 history.replaceState 在 beforeunload 上更改 url/state
【发布时间】:2012-02-10 13:59:04
【问题描述】:

我一直在寻找这个问题的答案,找不到一个,我想知道这是一个错误,似乎浏览器对这个HTML5功能的支持不好..

我只有 chrome 和 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 重新加载页面,其中包含信息。

但它在页面重新加载时表现得很奇怪。 首先在 chrome 中 window.history.state 甚至不存在(还不支持?),因此无法在重新加载时获取状态。并且在页面重新加载时不会记住 url 更改。 但是,如果您转到另一个站点并返回,则会记住 url 更改。

在 Firefox 中 window.history.state 存在并且在页面重新加载或历史前进/后退时,状态被正确获取。但是 url 更改在页面重新加载时不起作用,url 每 2 次重新加载正确更改。如果您前进/后退,将正确处理 url 更改。

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

如果有人可以在 Safari 上对其进行测试,我很想知道它在那里是如何工作的。

只需测试那里的代码:http://www.braikar.com/stuff/test.html

【问题讨论】:

  • 对我来说,它似乎每次在 Firefox 中都能正常工作,但在其他(Safari、Opera、Chrome)中,它会更改历史中的 URL,但“记住我”的内容并未添加到 div .在 IE 中它根本不起作用 - 那就不足为奇了!
  • 使用 HTML 5 需要注意的一个好网站是 html5test.com - 它的历史似乎不是那么好,但在某些时候您可能还需要了解许多其他内容.编辑:现在我明白了你对它在 Firefox 中每次重新加载时的意思是什么,我只是在单击链接时检查。
  • 我什至不介意 IE .. 我原以为它不会工作 ;) 我正在提前制作一个 cms 系统,这就是为什么我只想了解是否历史行为是正确的,或者是浏览器还没有很好地实现它。根据developer.mozilla.org/en/DOM/Manipulating_the_browser_history,该行为应该在页面重新加载时正常工作,因为我正在更改页面重新加载之前的状态..

标签: jquery html


【解决方案1】:

您是否尝试过使用 cookie 来存储变量?您可以在 beforeunload 中设置它并在加载时读取它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2018-04-19
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多