Access IFrame's parent URL [duplicate]

2019-08-04 07:10发布

问题:

Possible Duplicate:
access parent url from iframe

I've been looking around but can't find a set answer or solution for this. I have 2 websites, www2.domain.net and www3.domain.net both these websites have an iFrame on them that links to www.domain.co.uk/iframe.html

What I want to do is check the parent URL, i.e - is the user accessing www2.domain.net or www3.domain.net so I can show specific information to just people accessing www3.domain.net.

Is this possible?

Thanks, Andrew

回答1:

It's possible, but not very straightforward and requires that you have control over all three pages involved.

If you do control all three sites there's cross window messaging, courtesy of window.postMessage(). However, it's a (relatively) new addition to the DOM and unsupported in older browsers like IE 7, IE 6, Safari 4, Firefox 2 and Opera 9.

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


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

Another option is to pass the domain via the URL and then parse this at the other end:

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

and the required JavaScript (called from the page inside the iframe):

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


回答2:

It is not. iframes are considered frames and so the cross domain policy applies to them. Since the iframe domain (www.domain.co.uk/iframe.html) is different than the parent domain (www3.domain.net) it cannot access the parent domain. I believe, however, that you can still access the iframe from the parent domain either through the DOM or via window.frames (an array of all frames including iframes).



回答3:

It is not possible in this case (as posted) due to Same Origin Policy. However, it seems that you control all these domains. If so, you could pass the parent domain in the iFrame tag's src attribute using query string and access it in the iFrame page. See @Andy's answer for implementation.