页面重载后localStorage getItem返回null,需实现ID存储跳转逻辑
问题原因
你当前的代码不管URL里有没有id参数,都会把获取到的ids(无参数时就是null)存入localStorage。刷新页面后,URL里的id已经被pushState移除,此时ids为null,直接覆盖了之前存储的有效值,所以刷新后localStorage就变成null了。
修正方案
按照你的需求,我们需要先判断URL中是否存在新id:有新id则更新存储并跳转;无新id则使用之前存储的id跳转。调整后的代码如下:
<p id="demo"></p> <script> // 获取URL参数与本地存储的ID const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const newId = urlParams.get('id'); const storedId = localStorage.getItem('name'); // 核心逻辑处理 if (newId) { // 存在新ID:更新本地存储,显示并修改URL隐藏参数 localStorage.setItem('name', newId); document.getElementById('demo').innerHTML = newId; window.history.pushState('new', 'title', '?m=1'); } else if (storedId) { // 无新ID但有存储的ID:跳转至对应页面 window.location.href = `https://www.theseconds.xyz?id=${storedId}`; } else { // 既无新ID也无存储ID:默认处理(可根据需求修改) document.getElementById('demo').innerHTML = '无可用ID'; } </script>
关键调整点
- 仅当URL中存在有效
newId时,才更新localStorage,避免用null覆盖原有值 - 无新ID时,优先读取本地存储的
storedId进行跳转 - 将隐藏URL参数的逻辑限定在有新ID的分支中,避免无意义的历史状态修改
内容的提问来源于stack exchange,提问作者Shira
相关产品推荐
相关产品推荐

