HTML5历史记录API-状态对象的最大大小是多少?

|
pushState
方法接受状态对象。 Firefox文档说该对象的最大大小为640kb。规范中定义了浏览器可以实现的最小最大大小是多少?我是否可以合理地期望主流浏览器至少为我提供100kb? 编辑:我用Chrome进行了测试,它仍可用于1MB以上的状态对象。     
已邀请:
        否。此处的规范性文件为http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-pushstate,甚至没有提及限制数据大小。但是,建议使用其他限制:   用户代理可能会限制   状态对象添加到会话中   每页的历史记录。 在该示例中可以看到,该规范通常避免提及任何硬性限制,而是由浏览器制造商自行决定。因此,即使规范在将来的某个时刻进行了修订,以考虑数据大小限制的可能性,也不太可能为您提供真实的数字。取而代之的是,它“对于普通用例来说足够大”。     
        规范没有设置限制,但是各种浏览器都有其自身的限制。 Firefox有据可查,正如您所说,它的容量为640kB(“任何人都需要的RAM量”)。 我找不到任何地方列出的Chrome或Internet Explorer,但是一些快速测试显示: Chrome浏览器至少可以运行10MB(甚至更大), IE达到了1MB的限制(在IE11中,这是我所需要的全部)。 因此,为未来的人们总结一下: history.state对象的大小限制为:对于Firefox,为
640kB
,对于Internet Explorer 11为
1MB
,对于Chrome至少为
10Mb
。 编辑:经过测试的版本:IE:11,Chrome:33,Firefox:不相关,因为它们为您记录了MDN的最大大小:)。     
        仅看到MDN告知FireFox施加了640K的大小限制,不知道其他浏览器。 https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history     
        痛苦地,我的页面超出了IE11上的字符数限制。我进行了子字符串操作以获取准确的字符数,因为我在任何地方都找不到它。答案是(至少在IE11上)允许将524282个字符传递给pushState / replaceState。 我通过以下代码进行处理:
function pushState(data, title, url) {
  if (data.length > 524282) {
      //can\'t push the data to the History API--pass null
      history.pushState(null, title, url);
      history.replaceState(null, title, url);
  }
  else {
    history.pushState(data, title, url);
    history.replaceState(data, title, url);
  }
    document.title = title;
}
在通过ajax请求加载新内容之前,我调用beforeNavigate来保存用户当前所做的所有位置信息或状态更改。
function beforeNavigate(){
    if ($(\"#container\").html().length <= 524282) {
        //save current state to history before navigating via ajax
        history.replaceState($(\"#container\").html(), document.title, window.location.pathname);
    }
}
通过侦听popstate处理后退按钮和前进按钮。如果我们为数据传递了null值,则e.state将返回null,我们需要通过ajax请求加载存储的url。
window.addEventListener(\'popstate\', function (e) {
    if (e.state!=null) {
        $(\"#container\").html(e.state);
    }
    else {
        //load the partialpage into the container(a full html page is not returned by the ajax query for my site)
        $.ajax({
            url: location.href,
            type: \"GET\",
            success: function (data) {
                $(\'#container\').html(data);
            }
         });
    }
});
    

要回复问题请先登录注册