首页 > 解决方案 > Javascript - 将窗口作为变量传递

问题描述

这是我正在尝试做的事情:

这将防止浏览器在同一域上打开太多无用的窗口。

问题是我收到这样的错误:

Uncaught TypeError: sessionStorage.getItem(...).close is not a function

(如果我之前将它存储在变量中,结果相同)


此外,当我记录当前窗口时,我得到一个包含每个方法的对象:

Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
alert: ƒ alert()
...

当我记录存储的函数时,我得到了这个:

[object Window]

有没有办法实现我的目标?

是否可以将窗口作为简单变量传递?

难道我做错了什么?

标签: javascriptsessionwindowstoresession-storage

解决方案


发生这种情况是因为sessionStorage不存储对象而是字符串。将对象添加到存储中需要做的是在写入时对其进行字符串化,在读取时对其进行解析:

sessionStorage.setItem('test', JSON.stringify({ value: 'this is a test' }))
JSON.parse(sessionStorage.getItem('test'))

虽然这适用于大多数对象,但window遗憾的是它不是其中之一,因为它包含循环引用(即:它引用自身)您可以在此处阅读有关该问题的更多信息:Stringify DOMWindow object


推荐阅读