gpt4 book ai didi

javascript - "Friendly iFrame"检测 : How can I find my nested iframe in the top page?

转载 作者:行者123 更新时间:2023-12-02 17:25:01 27 4
gpt4 key购买 nike

我在“友好的 iframe”环境中遇到了一个具有挑战性的 iFrame 检测问题。我需要从 window.top 中识别 window.top.document 中的哪个外域 iframe 元素在其自身内部加载另一个具有相同域、协议(protocol)和端口的 iframe window.top.

所以核心问题是:在页面 A 上,如何在 JavaScript 中确定 iFrame B 包含 iFrame C?同样,页面 A 和 iFrame C 具有相同的域、协议(protocol)和端口,并且可以互相交流。 iFrame B 位于不同的域中。我想找到与页面 A 上的 iFrame C 关联的 DOMElement。

可能已经尝试过但不起作用的事情:

  • document.referrer 匹配。页面 A 将页面 A 上所有 iframe 的 src 属性与 iFrame C 中的 document.referrer 属性相匹配。不幸的是,如果页面 A 上加载了多个 iframe,则此方法不起作用iframe B 上具有相同 src 的内容。如果 iframe B 的 src 属性为 about:blankjavascript:something,它也不起作用>.
  • window.location.hash 通过查看 iframe 的 src 属性进行通信。页面 A 无法获取 iFrame B 的 window.location.hash,所以运气不好。
  • 这必须在 IE 6 和 7 中工作,因此 window.postMessage 支持。抱歉。

其他信息:

这是一个名为“Friendly iFrames”的配置。友好 iFrame (FIF) 在广告行业中很常见。它们的工作原理如下:

发布商网站上的页面(例如页面 A foo.com)从 some-random-ad-server.com 注入(inject) iframe B。然后,在 some-random-ad-server.com 上的 iframe B 内部,从 foo.com 加载另一个 iframe C。所以:

  • 我可以从 iFrame C 访问(即 DOM 操作)页面 A。页面 A 可以访问 iFrame C。
  • 页面 A 或 iFrame C 上的任何内容都无法访问 iFrame B。

最佳答案

我意识到这已经过时了,但我对客户端解决方案感到好奇并浏览了这篇文章。我正在使用服务器端来处理这个问题,为什么不使用服务器端作为最后的手段呢?当然,引用网址在服务器端是粗略的,但是在处理 iframe 页面时,引用网址非常可靠,可以与本地应用程序的主机和引用应用程序进行比较。

这是我在 ASP.NET/C# 中完成的方法(同样的事情也可以在 PHP 等中完成)

// set referrer
if (Request.UrlReferrer != null && Request.Url.Host != Request.UrlReferrer.Host)
{
Session["Referrer"] = Request.UrlReferrer.OriginalString;
}

关于javascript - "Friendly iFrame"检测 : How can I find my nested iframe in the top page?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com