3

I need to get the origin of an iframe. Until now the code we used created an anchor element and read it's origin, but this attribute is not available in Internet Explorer. What is the most elegant way to get the origin from an iframe object?

Here is the old code:

function getOrigin(href) {
  var l = document.createElement("a");
  l.href = href;
  return l.origin;
};

var x = document.getElementById("my-iframe");
alert(getOrigin(x.src));

But as i said the origin attribute is not supported in Internet Explorer.

I need to support Internet Explorer 10 and up.

Nick Russler
  • 4,608
  • 6
  • 51
  • 88
  • I tried to do something like this: `x.contentWindow.location.origin` but because of SOP i can't access it and i cannot add CORS. – Nick Russler Sep 04 '15 at 10:05

2 Answers2

3

var x = document.getElementById("myiframe");
alert(new URL(x.src).origin);
<iframe id="myiframe" src="https://www.google.com/search?q=test"></iframe>

to check if src is relative url: How to test if a URL string is absolute or relative?

to generate the absolute url of a relative url: Convert relative path to absolute using JavaScript

crisc2000
  • 1,082
  • 13
  • 19
1

Well it is quite dirty to create element to just parse a string.

Why don't just parse it yourself?

'http://stackoverflow.com:8080/123?param=test'.match(/^.+\:\/\/[^\/]+\//)[0]

If you also want to support relative urls (e.g. '/myurl') just add some condition to take current window's URL instead:

location.href.match...
smnbbrv
  • 23,502
  • 9
  • 78
  • 109
  • 1
    After removing the trailing slash `document.getElementById("my-iframe").src.match(/^.+\:\/\/[^\/]+/)[0]` is exactly what i need! Thanks! – Nick Russler Sep 04 '15 at 10:26
  • Just to know that works only for http(s) URIs, but not for blob:, blank: and data: URIs – mems Oct 24 '18 at 10:11