页面刷新后如何让JS变量保留值?

IT技术 javascript html
2021-01-22 15:48:32

是否可以永久更改 javascript 变量?如,如果我设置变量 X 并使其等于 1。然后单击按钮将该变量更改为 2。如何在刷新页面时使该变量保持在 2?

4个回答

这可以使用window.localStoragewindow.sessionStorage不同之处在于sessionStorage,只要浏览器保持打开状态,它就会持续存在,并在浏览localStorage器重新启动后继续存在。持久性适用于整个网站,而不仅仅是它的单个页面。

当您需要设置应反映在下一页中的变量时,请使用:

var someVarName = "value";
localStorage.setItem("someVarKey", someVarName);

并且在任何页面(例如页面加载时),获取如下:

var someVarName = localStorage.getItem("someVarKey");

.getItem()null如果没有存储值或存储的值,将返回

请注意,此存储中只能存储字符串值,但这可以通过使用JSON.stringify来克服JSON.parse从技术上讲,无论何时您调用.setItem(),它都会调用.toString()该值并存储该值。

MDN 的 DOM 存储指南(链接如下),有解决方法/polyfills,如果localStorage不可用,最终会退回到 cookie 之类的东西

使用现有的或创建自己的迷你库并不是一个坏主意,它抽象了保存任何数据类型(如对象文字、数组等)的能力。


参考:

是的,没有魔法……只是使用本地存储
2021-03-12 15:48:32
localStorage在 iOS 设备中似乎无法在隐私浏览模式下工作。参考 [ stackoverflow.com/questions/14555347/...
2021-03-18 15:48:32
@lan JSON.stringify 不保留我们的功能,我们如何解决这个问题?
2021-03-21 15:48:32

除了 cookie 和 之外localStorage,至少还有一个其他地方可以存储“半持久”客户端数据:window.name. 您分配给的任何字符串值都window.name将保留在那里,直到窗口关闭。

要测试它,只需打开控制台并键入window.name = "foo",然后刷新页面并键入window.name; 它应该以foo.

这有点麻烦,但是如果您不希望每次请求都将充满不必要数据的 cookie 发送到服务器,并且localStorage由于某种原因(旧客户端)而无法使用,则可以选择考虑。

window.name还有一个有趣的特性:它对来自其他域的窗口可见;它不像window. 因此,除了在用户导航或刷新页面时将“半持久”数据存储在那里之外,您还可以将其用于无 CORS 的跨域通信。

请注意,window.name只能存储字符串,但由于 的广泛可用性JSON,即使对于复杂数据,这也不是什么大问题。

在我的场景中,该参数不能跨选项卡或浏览器窗口保留,只能跨当前打开窗口中的页面调用保留。为此,window.name 工作完美!
2021-03-15 15:48:32
@Ian 哈哈,不错的收获。我不知道为什么,但我有点着迷window.name
2021-03-24 15:48:32
我现在很感兴趣!这一切听起来都很熟悉,但我不确定我是否了解此功能。我知道设置namewith window.open,但这是我曾经接受的
2021-03-25 15:48:32
我看到你在这里偷偷摸摸... stackoverflow.com/questions/10567847/ ... :)
2021-03-26 15:48:32

您将不得不使用 cookie 来存储跨页面刷新的值。您可以使用许多基于 javascript 的 cookie 库中的任何一种来简化 cookie 访问,就像这个

如果你只想支持 html5,那么你可以考虑localStorage / sessionStorage这样的Storage api

例如:使用localStoragecookie 库

var mode = getStoredValue('myPageMode');

function buttonClick(mode) {
    mode = mode;
    storeValue('myPageMode', mode);
}

function storeValue(key, value) {
    if (localStorage) {
        localStorage.setItem(key, value);
    } else {
        $.cookies.set(key, value);
    }
}

function getStoredValue(key) {
    if (localStorage) {
        return localStorage.getItem(key);
    } else {
        return $.cookies.get(key);
    }
}

您可以通过在客户端存储 cookie 来做到这一点。