クロスオリジンでiframeを使用する際に、子のページから親ページのURL(ドメイン)を取得する際に、document.referrerが使用できる(parent.location.href などは同一オリジンしか使用できない)。

この document.referrer は何を取得しているのかというと、HTML取得のために発行したHTTPリクエストのHTTPリファラを取得している。

HTTPリファラとはHTTPヘッダのひとつで、単一のリソース(ページ)からみて、それにリンクしているリソースのアドレスを指しており、リファラを参照することで、どこからそのリソースに要求が来たのかを知ることができる。

※ ただし、rel=noreferrer や <meta name=”referrer”> などを駆使することで、リファラを辿れないようにできる

iframe の場合は、呼び出し元のHTMLが iframe のページを呼び出していることになるため、デフォルトで呼び出し元ページのドメインを取得することができる。

またクロスドメインの制約がないのは、 document.referrer は値を書き換えてもHTTPリクエストは発生せず(単なるヘッダー情報のみのため)、またJSから値を書き換えることができないなど仕組上セキュリティを担保しているためである。

余談だが referrer という単語であるが、HTTPリファラの場合は「HTTP Referer」と綴ることがあるが、これはHTTPが策定された際に、ヘッダ名を間違ったスペルで書いてしまい、それがいまでも使われているという歴史的な背景がある。

参考:https://ja.wikipedia.org/wiki/HTTP%E3%83%AA%E3%83%95%E3%82%A1%E3%83%A9