假设我们在给定位置有一个网页(如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);
}
答案 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)都不会让内容从外来域中删除。
我认为这可能会有所帮助。