将整个窗口对象转换为字符串

时间:2016-06-08 08:30:44

标签: javascript

我需要检查整个窗口对象,以便检查实际保存数据的位置。

如果我执行window.toString(),我会"[object Window]" 我也尝试使用JSON.stringify(window)函数并得到以下错误:

VM18766:1 Uncaught TypeError: Converting circular structure to JSON

有什么办法可以获得整个javascript对象内容,包括原型函数吗?

我按顺序需要这个,以便我可以在对象文本中搜索保存在对象中的特定内容以及此对象所在的位置。

4 个答案:

答案 0 :(得分:0)

DOM无法在JSON中序列化,因为正如错误所述,它包含循环引用。一个简单的例子是每个元素都有一个.children数组,每个子元素都有一个.parent值。对我来说这似乎是XY problem。看看this question,这可能有助于您实际尝试做的事情。

答案 1 :(得分:0)

您可以使用this之类的第三方库,看看它是否输出您想要的内容。用法:

<script src="circular-json.js"></script>

(例如在你的onload函数中)

var CircularJSON = window.CircularJSON;
var obj = window;
var str;

obj.self = obj;
console.log(CircularJSON.stringify(obj));

您也可以使用

console.log(window);

检查对象并在浏览器控制台中搜索对象。

答案 2 :(得分:0)

如果您尝试执行JSON.stringify(window),则会出现以下错误:

Uncaught TypeError: Converting circular structure to JSON

在此this StackOverflow帖子中,您可以执行以下操作:

const p = document.getElementById('p');

const getCircularReplacer = () => {
    const seen = new WeakSet();
    return (key, value) => {
        if (typeof value === "object" && value !== null) {
            if (seen.has(value)) {
                return;
            }
            seen.add(value);
        }
        return value;
    };
};

p.innerHTML = JSON.stringify(window, getCircularReplacer());
<html>
<head>
</head>
<body>
<p id="p"></p>
<script src="app.js"></script>
</body>
</html>

答案 3 :(得分:-1)

这是不可能的,因为窗口对象是一个圆形对象

例如,请求中传递的对象具有循环引用,如:

var a = {};
a.b = a;