Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;友好的iFrame“;检测:如何在首页中找到嵌套的iframe?_Javascript_Dom_Iframe_Cross Domain - Fatal编程技术网

Javascript &引用;友好的iFrame“;检测:如何在首页中找到嵌套的iframe?

Javascript &引用;友好的iFrame“;检测:如何在首页中找到嵌套的iframe?,javascript,dom,iframe,cross-domain,Javascript,Dom,Iframe,Cross Domain,在“友好的iFrame”环境中,我遇到了一个具有挑战性的iFrame检测问题。我需要从window.top中识别window.top.document中的哪个外部域iframe元素在其内部加载另一个iframe,该iframe与window.top具有相同的域、协议和端口 所以这里有一个中心问题:在A页上,如何在JavaScript中确定iFrame B包含iFrame C?同样,A页和iFrame C具有相同的域、协议和端口,并且可以相互通信。iFrame B位于不同的域上。我想在A页上找到与

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

所以这里有一个中心问题:在A页上,如何在JavaScript中确定iFrame B包含iFrame C?同样,A页和iFrame C具有相同的域、协议和端口,并且可以相互通信。iFrame B位于不同的域上。我想在A页上找到与iFrame C关联的DomeElement

已尝试但不起作用的可能事项:

  • document.referer
    匹配。页面A将页面A上所有iFrame的
    src
    属性与iFrame C中的
    文档。referer
    属性相匹配。不幸的是,如果页面A上的多个iframe在iframe B上加载具有相同src的内容,则此功能不起作用。如果iframe B的
    src
    属性为
    about:blank
    javascript:something
    ,则此功能也不起作用
  • 查看iframe的
    src
    属性,对window.location.hash进行通信。页面A无法获取iFrame B的
    窗口.位置.散列
    ,因此没有运气
  • 这必须在IE6和IE7中工作,因此没有window.postMessage支持。对不起
其他信息:

这是一种称为“友好iFrame”的配置。友好iFrame(FIF)在广告业中很常见。以下是它们的工作原理:

发布者网站上的一个页面,比如说pageafoo.com,从some-random-ad-server.com注入iframeb。然后,在some-random-ad-server.com上的iframe B内部,从foo.com加载另一个iframe C。因此:

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

我意识到这很古老,但我对客户端解决方案很感兴趣,因此浏览了这篇文章。我使用服务器端来处理这个问题,为什么不使用服务器端作为最后手段呢?在服务器端,被授予的referer是粗略的,但是在处理iframed页面时,referer是非常可靠的,可以与本地应用程序和引用应用程序的主机进行比较

下面是我在ASP.NET/C#中的实现方式(在PHP等中也可以实现同样的功能)


你好我知道这是非常古老的,但我正在与Chrome67一起工作,我想知道你是否有任何workarround(甚至是某种利用)来存档这篇文章。非常感谢。
// set referrer
if (Request.UrlReferrer != null && Request.Url.Host != Request.UrlReferrer.Host)
{
    Session["Referrer"] = Request.UrlReferrer.OriginalString;
}