【问题标题】:"Access is denied" when script tries to access iframe in IE8当脚本尝试在 IE8 中访问 iframe 时“访问被拒绝”
【发布时间】:2011-01-17 14:18:35
【问题描述】:

我通过覆盖 document.write 函数并在稍后恢复它来“延迟加载”我的网站上的第 3 方广告脚本。此广告脚本创建一个 iframe,并尝试对其进行写入。

当脚本尝试访问 frame.document 时,我在 Internet Explorer 8(但在 FF、Safari 或 Chrome 中没有)中看到“访问被拒绝”错误。框架存在(在IE8开发者工具中可以看到)

知道为什么会这样吗?可能是因为 iframe 没有准备好还是因为跨站安全限制(我不完全理解)?

【问题讨论】:

  • IE 是跨域安全的一大痛点。我猜 iframe 不在您的域中?
  • 我的页面上没有明确设置域(这是一种简单的 ... 交易)。第 3 方脚本创建 iframe,我不相信它也明确设置域,但我猜该域被设置为远程服务器的 URI。
  • @BilalAslam,我一直在查看下面的精彩答案,想知道这到底是不是一个域问题?

标签: javascript iframe


【解决方案1】:

这取决于您尝试访问 frame.document 的上下文。

例如,假设您在 foo.com 上加载您的页面。反过来,它会在名为“myFrame”的框架中加载在 ad.com 上运行的广告。

如果您在 foo.com 上的脚本块中尝试访问 myFrame.document,您会收到投诉,因为这些页面不在同一个域中。您可以从 iframe 内部引用文档,但不能在外部引用。

这就是跨站点安全的基础知识。如果您可以向我们提供有关实际导致问题的 sn-p 的更多信息,以及各个部分在哪个域上运行,我们可能会提供更多帮助。

【讨论】:

    【解决方案2】:

    这里只是在黑暗中拍摄,没有看到您的代码,但请检查您是否在页面上明确设置了 document.domain。如果您正在设置文档的域,尝试访问动态注入的 iFrame 可能会在 IE 中引发访问错误。例如,如果设置了以下内容,请尝试将其注释掉以进行测试:

    //document.domain = "mydomain.com";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多