javascript - 当您无法控制时如何规避同源策略错误

标签 javascript exception error-handling try-catch same-origin-policy

我正在尝试对具有我不知道的深层层次结构的大对象进行字符串化,以摆脱它的循环引用。它在大多数情况下都有效,除了我经常遇到同源策略异常。我对引用其他域或其他受限元素的任何子对象不感兴趣。

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/

相关文章:

javascript - jquery 基于哪个 javascript 设计模式?

javascript - 哪种方式绑定(bind)到动态单选按钮更好?

异常处理架构

jakarta-ee - J2EE 错误处理 - 应用程序和用户

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

javascript - 列出由带有字母标题的 javascript 按字母顺序排列的列表

javascript - 如何在没有本地主机的情况下调用 URL?

java - 从 Java 执行 Rscript

c# - 如何在 C# 中编写用户定义的异常?

c# - 如何使用Javascript在MVC中显示成功或错误消息?