我一直在四处寻找,但无法找到一组答案或解决方案这一点。 我有2个网站,www2.domain.net
和www3.domain.net
这两个网站对他们有一个链接到www.domain.co.uk/iframe.html
我想要做的是检查父URL,即一个iFrame - 在用户访问www2.domain.net
或www3.domain.net
这样我就可以显示特定信息只是访问www3.domain.net
的人。
这可能吗?
感谢, 安德鲁
我一直在四处寻找,但无法找到一组答案或解决方案这一点。 我有2个网站,www2.domain.net
和www3.domain.net
这两个网站对他们有一个链接到www.domain.co.uk/iframe.html
我想要做的是检查父URL,即一个iFrame - 在用户访问www2.domain.net
或www3.domain.net
这样我就可以显示特定信息只是访问www3.domain.net
的人。
这可能吗?
感谢, 安德鲁
它不是。 iframe被认为是框架,因此跨域策略适用于它们。由于iframe域(www.domain.co.uk/iframe.html)与父域(www3.domain.net)不同,因此无法访问父域。然而,我相信您仍然可以通过DOM或通过window.frames(包括iframe在内的所有框架的数组)访问来自父域的iframe。
由于Same Origin Policy,在这种情况下不可能发布(和发布一样)。但是,您似乎控制了所有这些域。如果是这样,您可以使用查询字符串在iFrame标记的src属性中传递父域,然后在iFrame页面中访问它。请参阅@ Andy的实施答案。
这是可能的,但不是非常简单,并且要求您可以控制涉及的所有三个页面。
如果你做控制所有三个网站都有跨窗口消息传递,由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"
如果你在同一个域中 – Mohsen
HTTP这是可能的:然后在另一端解析这个// jsfiddle.net/w Xrgx/2/ – Mohsen
@Mohsen,OP已经明确提到了所有的领域。主机页面和iframe的域名不同,因此iframe **不能**读取父级的位置。 –