是否可以检测页面是否由特定域进行iframed?

时间:2011-01-30 05:27:22

标签: javascript iframe

是否可以测试该页面是否由具有JavaScript的特定域构成?

像这样:

if (window!=window.top){
   if (this page is iframed by www.foo.com){ // load foo's special navigation bar}
   if (this page is iframed by www.bar.com){ // load bar's special navigation bar}
} else { //load normal navigation bar }

2 个答案:

答案 0 :(得分:3)

尝试

var parentLocation='';
if(window.parent && document.referrer)
    parentLocation = document.referrer;
alert(parentLocation);

您应该会在警告框中看到父页面的网址。正如他们所说,其余的就是历史......

答案 1 :(得分:0)

编辑/更新虽然可能获取父iframe的域名,但我不想删除此答案,因为有一些有用的信息在访问DOM方面理解相同的域策略。 Soumya92的回答证明,一个域上的iframe确实可以检索父域的域。

但是,关于DOM访问的其他信息仍然适用。

原始答案

不幸的是,这在大多数浏览器中都是不可能的,除非两个网站都通过设置document.domain属性授予其他域访问每个域的数据的权限,否则绝对不可能。即使这样,它也只适用于子域。

例如,只要两个 HTML页面都设置了foo.example.com属性,bar.example.comdocument.domain就可以访问彼此的DOM:

// allow foo.example.com and bar.example.com to communicate
document.domain = "example.com";  

如果您要检查www.foo.com是否是从www.bar.com加载的文档的父级,那么您将无法执行此操作,因为iframe将无法访问{{1} }}。

您可以确定iframe是否在同一个域中加载,并使用推断功能来确定在遇到相同的域策略错误时它是否未从同一域加载。

除此之外,您将无法确定有关哪个域正在加载您的文档的任何细节。