由于某些原因,我似乎无法在DOMWindow对象上使用JSON.stringify。例如:
console.log(window.self); // Outputs a hierarchical DOMWindow object
console.log(JSON.stringify(window.self)); // Outputs nothing - not even an error
alert(window.self); // Alerts "[object DOMWindow]"
alert(JSON.stringify(window.self)); // Again nothing - not even an error
在Safari和Chrome上进行了测试。有人知道我如何实现这一点吗?
编辑:
移动编辑到一个新的问题,因为它不是真的具体到这一点。
6条答案
按热度按时间3pvhb19x1#
你没有得到一个错误吗?我得到
TypeError: Converting circular structure to JSON
。我会说,这是不可能的。另外,
window
和window.self
指向同一个对象(Global对象),因此您不需要使用该属性。ztigrdn82#
你可以使用这个函数来字符串化窗口对象:
holgip5t3#
为什么要序列化DOM?如果必须的话,Crescent的链接是你需要看的地方。你不能序列化(字符串化)窗口对象的原因是因为它包含循环引用,而
JSON.stringify
默认不支持它们。bq8i3lrv4#
在Chrome 8 dev中,我得到了
TypeError: Converting circular structure to JSON
(窗口通常包含一个自引用self
,window
和top
引用,如果你不在一个框架中),所以直接使用JSON.stringify
是行不通的。这听起来像是在调试输出。如果你只关心一些信息,你可以将这些信息复制到一个对象中,然后将其字符串化。然后将其封装在一个函数中,以从
window
中获取所有你认为你会关心的信息。vcirk6k65#
正如其他人所说,stringify不支持循环引用,而
DOMWindow
包含循环引用。通常,循环引用可以使用道格拉斯Cockford的JSON cycle.js转换为JSON。然而,我刚刚在
window
上尝试了这个,它导致了堆栈溢出。虽然这可能是cycle.js代码中的一个错误,但似乎更有可能的是window
对象太大了。aurhwmvo6#
这个答案不是我的,但我在这里做同样的事情,在其他地方找到了这个答案。我没有打开那个页面-我有github页面仍然打开...
JSON.stringify deep objects -- thanks,@Bergi. https://github.com/Canop/JSON.prune