我有两个html文件:index.html和lobby.html。在我在index.html中加载的main.js中,使用window.location.href加载lobby.html。我已经尝试了在main.js中定义全局变量的各种方法(名称空间如:var Global = {}; Global.variableName = 0; ... Global.variableName = whatever;
,只需在函数作用域中定义变量:var myGlobal;
甚至使用window.
来定义和使用全局变量: window.myGlobal = 0; ... window.myGlobal = whatever;
)。无论这些方法如何,每当我尝试在lobby.html的单独脚本中访问这些“全局变量”时,它总会抛出一个未定义的错误。这有什么用呢?
答案 0 :(得分:3)
第一个问题的答案,为什么我不能......?,是你在加载页面时开始一个新的会话。因此,上一个会话中的任何Javascript变量都消失了。
另一个(隐含的)问题,如何在会话中保留Javascript变量的值?要么是use cookies in Javascript(MDN),要么将请求变量附加到URL的末尾然后在新页面加载时处理它们:GET(SO)
答案 1 :(得分:2)
当加载新页面时,您实际上是按照其他人的解释开始新会话,因此数据将被重置。为了保留页面中的某些数据,您可以根据业务需要使用HTML5 Web存储 - 会话存储或本地存储。
<强> MDN source 强>
Web Storage中的两种机制如下:
- sessionStorage为每个给定来源维护一个单独的存储区域,该区域在页面会话期间可用(只要 浏览器打开时,包括页面重新加载和恢复)。
- localStorage会做同样的事情,但即使关闭并重新打开浏览器也会一直存在。
<强> W3Schools 强>
HTML本地存储提供了两个用于在客户端上存储数据的对象:
〜 window.localStorage - 存储没有过期日期的数据
〜 window.sessionStorage - 存储一个会话的数据(浏览器选项卡关闭时数据丢失)