防止IFRAME嵌入,但有一个例外

时间:2010-12-24 17:08:52

标签: javascript iframe

假设我们在给定位置有一个网页(如www.foo.com/page1.html),该页面包含此(全局)代码:

if (self != top) {
    top.location.replace(location.href);
}

因此,如果我们尝试将该页面加载到IFRAME中,页面将“跳出”iframe进入浏览器窗口,这将(因此)销毁包含iframe的页面。

这没关系,但我想对该规则实施例外。具体来说,在另一个域上有另一个页面(如www.bar.com/page2.html),我希望其他页面 能够通过IFRAME嵌入第一页。

我如何修改第一页的代码,以便它可以嵌入到另一页?

这样可以吗?

if (self != top && top.location.href !== "http://www.bar.com/page2.html") {
    top.location.replace(location.href);
}

2 个答案:

答案 0 :(得分:3)

我怀疑您是否能够检查外部父网页的网址,因为Same Origin Policy应该阻止访问其任何属性。

也许有一些我知道的诡计无论如何都允许它。除此之外,我想到的最好的想法是检查document.referrer。据我所知,iframe中请求的文档将始终在浏览器的引荐来源中包含嵌入页面的URL。

如果引荐来源是http://www.bar.com/page2.html,则该页面位于该页面上的iframe中,或者是从那里链接到的(这是此方法唯一真正的大缺点:您无法分辨100确定它是传入链接还是嵌入iframe)。

显然,该文件的推荐人是客户可以欺骗的,但我不认为这是一个问题。

答案 1 :(得分:1)

如果您传递带有SAMEORIGIN值的X-FRAME-OPTIONS http标头,则大多数现代浏览器(包括IE8)都不会让内容从外来域中删除。

我认为这可能会有所帮助。