使用JavaScript在请求之间传递单一使用值的最佳方法

使用JavaScript在请求之间传递单一使用值的最佳方法,javascript,history.js,html5-history,Javascript,History.js,Html5 History,我需要通过JS触发页面重新加载,保持垂直滚动位置 我正在使用中描述的解决方案: 计算当前滚动位置 将当前位置添加为querystring参数,然后重定向 重新加载页面时,从查询字符串读取值并调整滚动位置 但是,我只想恢复第一次重定向时的滚动位置。如果用户在页面上滚动,然后使用Ctrl-R触发手动重新加载,我不想重新滚动到保存的位置 是否有某种方法可以只使用JavaScript传递一个对下一个请求可见的单一使用值?或者在不重定向的情况下从document.location.href中删除值 我是否

我需要通过JS触发页面重新加载,保持垂直滚动位置

我正在使用中描述的解决方案:

  • 计算当前滚动位置
  • 将当前位置添加为querystring参数,然后重定向
  • 重新加载页面时,从查询字符串读取值并调整滚动位置
  • 但是,我只想恢复第一次重定向时的滚动位置。如果用户在页面上滚动,然后使用Ctrl-R触发手动重新加载,我不想重新滚动到保存的位置

    是否有某种方法可以只使用JavaScript传递一个对下一个请求可见的单一使用值?或者在不重定向的情况下从
    document.location.href
    中删除值


    我是否应该在使用HTML 5历史API后“清除”位置值?

    将该值保存到sessionStorage。使用后,请删除该值,以便在手动刷新时无法读取该值

    sessionStorage.setItem("scroll_position", "300");
    sessionStorage.getItem("scroll_position"); // 300
    sessionStorage.removeItem("scroll_position");
    
    sessionStorage——它可以很好地用于IE8+的任何相关版本的其他浏览器


    StackOverflow通过在URL散列中存储帖子id来处理页面加载滚动后的问题。你也可以这么做

    http://your.url.com/page#300
    
    url中有#21485393,它与锚元素
    匹配。加载页面后,它将自动滚动到该元素

    你也可以做类似的事情

    http://your.url.com/page#300
    

    window.location.hash
    
    完成后,将其移除

    window.location.hash = ""
    

    我的第一个想法是使用cookie/会话来存储该变量,然后在使用该变量后将其删除。@Populus,我也考虑过使用cookie,但不能使用固定的cookie名称,否则如果一个用户有多个打开到不同页面的选项卡,每个选项卡都试图使用此功能,我可能会遇到问题。虽然就像w/localStorage一样,我想我可以使用完整的URL生成一个唯一的cookie名称以避免冲突。如果你不刷新整个页面,而是只刷新需要刷新的部分,怎么样?@Populus这是长期目标,但在这个特殊的情况下,我确实需要一整页的刷新,因为我已经建议了一半!本地存储非常棒。它得到了广泛的支持。。。这样的ninjaI考虑了localStorage,但认为它是每浏览器存储,而不是每浏览器选项卡存储,这意味着如果用户打开多个选项卡,我可能会遇到问题。我想我可以在构建密钥时使用完整的URL…编辑我的答案。改用会话存储。它是一个localStorage实例,对于选项卡/窗口是唯一的(即使是相同的url),其工作方式与localStorage完全相同。看得更清楚!是的,真不敢相信IE8支持它!