我正在尝试对具有我不知道的深层层次结构的大对象进行字符串化,以摆脱它的循环引用。它在大多数情况下都有效,除了我经常遇到同源策略异常。我对引用其他域或其他受限元素的任何子对象不感兴趣。
JSON.parse(stringify(window));
抛出:
Uncaught DOMException: Blocked a frame with origin "http://www.xxxxxx.com" from accessing a cross-origin frame.
鉴于我无法控制 native
JSON.stringify()
,如何优雅地跳过导致异常的原因并完成我的代码的执行来避免异常代码? JSON.stringify()
在这里只是一个例子,我想更一般地说我要问的是如果您不想违反同源政策异常(exception)但必须像在这种情况下那样处理它,如何规避同源政策异常(exception)?
最佳答案
尝试这个!首先,您需要删除页面上的所有 iframe 以防止出现跨源错误。然后你可以运行替换函数作为 JSON.stringify()
的第二个参数。检查并丢弃循环引用。
document.querySelectorAll('iframe').forEach(iframe => iframe.remove());
let cache = [];
const globals = JSON.stringify(window, (key, value) => {
if (typeof value === 'object' && value !== null) {
// Circular reference found, discard key
if (cache.indexOf(value) !== -1) return;
// Store value in our collection
cache.push(value);
}
return value;
});
cache = null; // Enable garbage collection
console.log(globals);
关于javascript - 当您无法控制时如何规避同源策略错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201681/