2011-09-27 90 views
1

可能重复:
access parent url from iframe访问IFrame的父URL

我一直在四处寻找,但无法找到一组答案或解决方案这一点。 我有2个网站,www2.domain.netwww3.domain.net这两个网站对他们有一个链接到www.domain.co.uk/iframe.html

我想要做的是检查父URL,即一个iFrame - 在用户访问www2.domain.netwww3.domain.net这样我就可以显示特定信息只是访问www3.domain.net的人。

这可能吗?

感谢, 安德鲁

回答

0

它不是。 iframe被认为是框架,因此跨域策略适用于它们。由于iframe域(www.domain.co.uk/iframe.html)与父域(www3.domain.net)不同,因此无法访问父域。然而,我相信您仍然可以通过DOM或通过window.frames(包括iframe在内的所有框架的数组)访问来自父域的iframe。

-1

由于Same Origin Policy,在这种情况下不可能发布(和发布一样)。但是,您似乎控制了所有这些域。如果是这样,您可以使用查询字符串在iFrame标记的src属性中传递父域,然后在iFrame页面中访问它。请参阅@ Andy的实施答案。

+0

如果你在同一个域中 – Mohsen

+0

HTTP这是可能的:然后在另一端解析这个// jsfiddle.net/w Xrgx/2/ – Mohsen

+1

@Mohsen,OP已经明确提到了所有的领域。主机页面和iframe的域名不同,因此iframe **不能**读取父级的位置。 –

1

这是可能的,但不是非常简单,并且要求您可以控制涉及的所有三个页面。

如果你控制所有三个网站都有跨窗口消息传递,由window.postMessage()提供。然而,这是(相对)新增加的DOM和不支持在旧的浏览器等IE 7,IE 6,Safari浏览器4,Firefox 2和歌剧9.

// Parent: 
iframeWin.postMessage("Hello, from "+window.location.host); 


// Iframe: 
window.onmessage = function (evt) { alert(evt.origin); } 

另一种选择是经由URL来传递域

<iframe src="www.domain.co.uk/iframe.html?www2.domain.net" /> 

和所需的JavaScript(从页面调用的iframe内):

alert(window.location.search); 
//-> "?www2.domain.net" 
+0

很多浏览器都不支持这个功能 – Mohsen

+0

http://caniuse.com/#search=cross-document messaging – Mohsen

+0

@Mohsen:我的大脑错过了答案中的两个字,现在已经修复了。当你说“这个”时,你似乎指的是整个答案。我的答案的最后一部分可以在任何浏览器**中实现。 –