如何获得JSvariables保留页面刷新后的值?
是否有可能永久更改一个JavaScriptvariables? 如在,如果我设置variablesX,使等于1.然后onClickbutton更改该variables为2.我怎样才能得到该variables保持在刷新页面2?
这可能与window.localStorage
(或window.sessionStorage
)。 区别在于,只要浏览器保持打开状态, sessionStorage
持续, localStorage
在浏览器重新启动之后仍然存在。 持久性适用于整个网站,而不仅仅是一个页面。
当你需要设置一个应该反映在下一页的variables时,使用:
var someVarName = "value"; localStorage.setItem("someVarName", someVarName);
并在任何页面(如当页面已加载),得到它像:
var someVarName = localStorage.getItem("someVarName");
如果没有存储值或存储的值, .getItem()
将返回null
。
请注意,只有string值可以存储在此存储中,但是可以通过使用JSON.stringify
和JSON.parse
。 从技术上讲,每当你调用.setItem()
,它将调用.toString()
的值并存储。
MDN的DOM存储指南(链接如下),有解决方法/ polyfill,如果localStorage
不可用,最终会回落到cookies等。
使用现有的,或创build自己的迷你库,抽象保存任何数据types(如对象文字,数组等)的能力不是一个坏主意。
参考文献:
- 浏览器
Storage
– https://developer.mozilla.org/zh-CN/docs/Web/Guide/API/DOM/Storage -
localStorage
– https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage -
JSON
– https://developer.mozilla.org/en-US/docs/JSON - 浏览器存储兼容性 – http://caniuse.com/namevalue-storage
- 存储对象 – 将对象存储在HTML5 localStorage中
除了cookie和localStorage
,至less还有一个地方可以存储“半持久性”客户端数据: window.name
。 您分配给window.name
任何string值都将保留在窗口closures之前。
要testing它,只需打开控制台并键入window.name = "foo"
,然后刷新页面并键入window.name
; 它应该用foo
来回应。
这是一个黑客,但如果你不希望cookie填充不必要的数据被发送到服务器与每个请求,并且如果你不能使用localStorage
出于任何原因(遗留客户端),它可能是一个选项考虑。
window.name
有另一个有趣的属性:从其他域的窗口可见; 几乎所有其他window
属性都不受同源策略的约束。 因此,除了在用户导航或刷新页面时存储“半持久性”数据之外,您还可以将其用于无CORS跨域通信。
请注意, window.name
只能存储string,但是JSON
的广泛可用性,即使对于复杂的数据,这也不是什么大问题。
您将不得不使用cookie来存储整个页面刷新的值。 您可以使用许多基于javascript的cookie库中的任何一个来简化cookie访问,就像这样
如果您只想支持html5,那么您可以考虑Storage api,如localStorage / sessionStorage
例如:使用localStorage和cookies库
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来做到这一点。