跨页面保留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 的 using postMessage() 跨域持久化变量。

以上是关于跨页面保留javascript变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

页面刷新后如何让JS变量保留值? [复制]

跨多个页面设置javascript全局变量[重复]

关于JavaScript全局变量的问题(生存周期,是不是跨页面)

如何在 JavaScript 中反转数组,同时保留原始数组的原始值? [复制]

范围和传递 Express/JavaScript - 如何传递数据库变量? [复制]

跨浏览器窗口大小调整事件 - JavaScript / jQuery