Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器背面使window.history.state为空的可能情况有哪些?_Javascript_Jquery_Browser History_Pushstate_Html5 History - Fatal编程技术网

Javascript 在浏览器背面使window.history.state为空的可能情况有哪些?

Javascript 在浏览器背面使window.history.state为空的可能情况有哪些?,javascript,jquery,browser-history,pushstate,html5-history,Javascript,Jquery,Browser History,Pushstate,Html5 History,我的网站的查询字符串URL如下: ?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1 当用户转到下一页(从第1页到第2页)时: 我们显式递增pn(页码为1)并在查询字符串URL中设置它 已更改的查询字符串: ?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=2 我还存储了旧的查询字符串,它看起来像: ?budget=0-&year=0-&a

我的网站的查询字符串URL如下:

?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1
当用户转到下一页(从第1页到第2页)时:

  • 我们显式递增
    pn
    (页码为1)并在查询字符串URL中设置它

    已更改的查询字符串:

    ?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=2
    
    我还存储了旧的查询字符串,它看起来像:

    ?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1
    
  • 然后,我将这两个按钮都推到“窗口历史记录”以更改URL并将“上一个”保存回浏览器:

    window.history.pushState(oldQS, null, newQS);
    
  • 完成此操作后,当我在第2页时,我检查
    window.history.state
    。它存储我以前的状态:

    ?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1
    
  • 我从第2页按browser back返回到第1页。我将断点放在:

    $(window).on('popstate', function(e) {
        console.log(e.originalEvent.state)
    });
    
    e.originalEvent.state
    null

  • 观察:
    • 当我在第2页时,
      窗口.history.state
      不是
      null
      并存储正确的值
    • 当我单击browser back时,它将获得
      null
    到目前为止我所做的: (不起作用。)

    • 将断点放在
      hashchange
      事件上,但没有帮助,因为URL中没有#

    • 在每个
      窗口上放置断点。我的Javascript代码上的历史记录
      函数,如
      pushState()
      replaceState()
      ,但当我按browser back时,没有一个函数被击中

    我不知道要查看哪些其他位置/函数可能正在将
    window.history.state
    更改为
    null

    我如何通过单击“返回浏览器”来找出它是如何变为空的以及在哪里变为空的?

    您问:

    我不知道要查看哪些其他位置/函数可能会将window.history.state更改为null

    我如何通过单击browser back(浏览器返回)来找出它是如何变为空的以及在哪里变为空的

    让我们阅读W3C HTML5规范:

    历史记录接口的state属性必须返回用户代理设置的最后一个值。最初,其值必须为null

    结论:加载文档时,
    history.state
    最初为
    null

    当需要用户代理将历史遍历到指定的条目[…]时,用户代理必须执行以下操作

  • 如果条目是状态对象条目,则将状态设为该状态对象的结构化克隆。否则,让state为null
  • 如果指定条目的文档具有最新条目,且该条目不是指定条目,则将state changed设置为true;否则就让它成为假的
  • 如果state changed为true,则使用PopStateEvent接口在文档的窗口对象处激发名为popstate的受信任事件,并将state属性初始化为state值。[……]

  • 结论:当导航回加载文档时的状态时,由
    popstate
    事件触发的状态是
    null

    history。state
    null,或者它是否按预期包含您的信息?history.state也是null。哦,您没有第1页的状态,您只定义了第2页的状态。然后,当您返回时,page1没有任何状态,因为让用户进入page1的任何内容都没有绑定到页面的状态。当用户从page1转到page2时,我存储了page1状态:window.history.pushState(oldQS、null、newQS);oldQS具有page1状态。是的,但您正在为page2而不是page1存储
    oldQS
    。。。在“转到”页面之前,必须设置这种状态。在转到第1页之前,如何设置状态?(我想你不会…)