Okay, I have a page on and on this page I have an iframe. What I need to do is on the iframe page, find out what the URL of the main page is.
I have searched around and I know that this is not possible if my iframe page is on a different domain, as that is cross-site scripting. But everywhere I've read says that if the iframe page is on the same domain as the parent page, it should work if I do for instance:
parent.document.location
parent.window.document.location
parent.window.location
parent.document.location.href
... or other similar combos, as there seems to be multiple ways to get the same info.
Anyways, so here's the problem. My iframe is on the same domain as the main page, but it is not on the same SUB domain. So for instance I have
http:// www.mysite.com/pageA.html
and then my iframe URL is
http:// qa-www.mysite.com/pageB.html
When I try to grab the URL from pageB.html
(the iframe page), I keep getting the same access denied error. So it appears that even sub-domains count as cross-site scripting, is that correct, or am I doing something wrong?
The following line will work:
document.location.ancestorOrigins[0]
this one returns the ancestor domain name.You're correct. Subdomains are still considered separate domains when using iframes. It's possible to pass messages using
postMessage(...)
, but other JS APIs are intentionally made inaccessible.It's also still possible to get the URL depending on the context. See other answers for more details.
For pages on the same domain and different subdomain, you can set the
document.domain
property via javascript.Both the parent frame and the iframe need to set their document.domain to something that is common betweeen them.
i.e.
www.foo.mydomain.com
andapi.foo.mydomain.com
could each use eitherfoo.mydomain.com
or justmydomain.com
and be compatible (no, you can't set them both tocom
, for security reasons...)also, note that document.domain is a one way street. Consider running the following three statements in order:
Modern browsers can also use window.postMessage to talk across origins, but it won't work in IE6. https://developer.mozilla.org/en/DOM/window.postMessage
I couldnt get previous solution to work but I found out that if I set the iframe scr with for example
http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder
then I could, in the iframe extractthisdomain.com/thisfolder
by using following javascript:If your iframe is from another domain, (cross domain), you will simply need to use this:
and - here you've got the main url!
In chrome it is possible to use location.ancestorOrigins It will return all parent urls