从多级跨域iframe确定顶级窗口的URL

Dip*_*ndu 6 javascript iframe cross-domain

我正在编写一个JavaScript像素,将在发布商页面上使用AD广告素材.此广告将包含在发布商网站上的跨域iframe(有时是多个级别)中.所以发布商页面看起来像这样

主持人(出版商)网站

<html>
    <iframe src="http://domain1.com" name="first_level_iframe">
        <iframe src="http://domain2.com" name="second_level_iframe">
            <!--The script I want to write will be hosted here-->
        </iframe>
    </iframe>
</html>
Run Code Online (Sandbox Code Playgroud)

如果广告客户想要了解他/她的AD所服务的所有页面,那么我们需要知道主机页面网址.

正如这里提到的,我们可以像这样使用document.referrer获取父页面url

var url = (window.location != window.parent.location) ? document.referrer: document.location;
Run Code Online (Sandbox Code Playgroud)

但它只适用于只有一级的域.我们无法达到最高级别,因为我们对"domain1.com"iframe没有任何控制权.这是人们试图长期解决的一个问题,而且已经有许多问题已经在SO上提出了完全相同的问题.但是因为这篇文章,我再次问它.它声称他们拥有可以检测顶级窗口URL的专利解决方案.以下是博客的摘录

救生员是AdSafe开发的一种技术:解决方案的关键是能够读取托管广告的顶部框架的地址(*).我们正在检测色情内容,因为应该出现在"干净的发布商"网站中的广告出现在色情网站的框架内.将HGTV视为一个说明性的,但不是这种"干净的出版商"的真实例子.

那么,有没有办法检测顶级窗口网址?

类似问题: 顶部窗口的URL表单位于多个嵌套的跨域iFrame内部

Oli*_*i C 1

我有一个解决方案可以让您在 Chrome 和 Opera 中获取域(在多个嵌套的跨域 iframe 中),但不幸的是,这在其他浏览器中是不可能的。

您可以使用“window.location.ancestorOrigins”属性。

此代码片段将跨浏览器工作,为您获取最接近的页面 URL:https ://gist.github.com/ocundale/281f98a36a05c183ff3f.js