跨页面保留javascript变量? [复制]
Posted
技术标签:
【中文标题】跨页面保留javascript变量? [复制]【英文标题】:Persist javascript variables across pages? [duplicate] 【发布时间】:2010-12-31 04:49:00 【问题描述】:有没有一种方法可以在不同的页面中持久化 javascript 变量?假设在页面 A 我设置window.someVar = 5
。然后我通过单击 A 中的超链接移动到页面 B,并执行类似 alert(window.someVar)
之类的操作——我应该得到一个显示 5 的消息框。有没有一种技术可以保持 someVar
这样...?
【问题讨论】:
看看这个答案:How to send variables from one file to another in Javascript? 您也可以在这里找到完整的答案:***.com/a/30070207/2247494 接受的答案肯定应该改变。目前,Storage API 是持久化值的标准。window.name
方法已过时。
有,这些被称为javascript cookies
【参考方案1】:
您可以使用窗口名称window.name
来存储信息。这被称为JavaScript session。但它只有在使用相同的窗口/选项卡时才有效。
【讨论】:
是否可以使用这种技术创建到会话的永久链接,以便将会话数据存储在页面的 URL 中? @AndersonGreen 存储绑定到实际的窗口/选项卡。如果窗口/选项卡关闭,数据将丢失。如果您正在寻找更持久的解决方案,请查看CMS’ answer。像Web storage 这样的技术有不同的范围。 @Gumbo 是的,但我想知道是否可以从页面的 URL 保存和加载会话数据,如下所示:myPage.html#sessionDataGoesHere
。
@AndersonGreen 是的,这是可能的。 URI 的片段可通过location.hash
访问。
它对我不起作用。浏览器问题sessvars.newObj
未定义【参考方案2】:
为了完整起见,还请查看 HTML5 的本地存储功能和 sessionStorage。所有现代浏览器的最新版本都支持这些,并且比 cookie 更易于使用且不那么繁琐。
http://www.w3.org/TR/2009/WD-webstorage-20091222/
https://www.w3.org/TR/webstorage/。 (第二版)
以下是一些使用 sessionStorage 和 localStorage 设置和获取值的示例代码:
// HTML5 session Storage
sessionStorage.setItem("variableName","test");
sessionStorage.getItem("variableName");
//HTML5 local storage
localStorage.setItem("variableName","Text");
// Receiving the data:
localStorage.getItem("variableName");
【讨论】:
实施参考:developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage 浏览器支持:caniuse.com/#search=sessionStorage 嗯 MDN 声称 IE8 可以用于 sessionStorage,caniuse 声称需要 IE11。【参考方案3】:我建议你看看这个库:
PersistJS我真的很喜欢它,它支持多种存储后端(从 cookie 到 HTML5 存储、Gears、Flash 等等……),它的使用真的是透明,你不必须知道或关心使用哪个后端,库将根据浏览器功能选择正确的存储后端。
【讨论】:
它也可以存储大对象吗?例如窗口对象 它可以存储具有循环/循环引用的对象吗?喜欢弹出window
对象?或者,像 HTML5 File API File 对象这样的原生对象?
@MohsinSheikhKhalid pablotron.org/?cid=1557 此链接已过时,无法迁移...请更新链接
链接已过时..因为它正在迁移..您可以更新它吗? @CMS【参考方案4】:
是的,使用Cookies。但要小心,不要放太多(我认为有 4kb 的限制)。但是有几个变量是可以的。
如果您需要存储的内容远不止这些,请查看 @Annie 在另一个答案中的精彩提示。对于小时间数据存储,我会说 Cookies 是最简单的东西。
请注意,cookie 存储在客户端。
【讨论】:
cookie 的其他缺点是它们与域内创建的每个 HTTP 请求一起发送,即使是像图像这样的 静态 内容...【参考方案5】:您可以使用 HTML5 存储、Flash Storage 或 Gears 来持久化值。 dojo storage 库为此提供了一个很好的包装器。
【讨论】:
更新链接 - dojotoolkit.org/reference-guide/1.10/dojo/store.html【参考方案6】:我推荐网络存储。示例:
// Storing the data:
localStorage.setItem("variableName","Text");
// Receiving the data:
localStorage.getItem("variableName");
只需将variable
替换为您的变量名,将text
替换为您要存储的内容。根据 W3Schools 的说法,它比 cookie 更好。
【讨论】:
这适用于单个域,而不是跨多个域。对我来说没多大用处。 @MasudRahman 您还可以使用带有嵌入式 iframe 的 usingpostMessage()
跨域持久化变量。以上是关于跨页面保留javascript变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
关于JavaScript全局变量的问题(生存周期,是不是跨页面)
如何在 JavaScript 中反转数组,同时保留原始数组的原始值? [复制]