2013-05-07 7 views
17

状況は次のとおりです。サイトがあり、クライアントに属しているため、自分のドメインにはないので、client.comと言うことができます。document.referrerとwindow.parent.location.hrefの相違点

このサイトには、iframeがあります。このiframeのソースは、別のjs(client.js)をロードするシンプルなjsコードです。このコードは私のドメインにあります。

私がする必要があるのは、iframeがあるページの正確なURLを取得することです。だから今私はdocument.referrerwindow.parent.location.hrefの違いを逃げようとしています。

どちらも必要なものを私に与えてくれますが、より信頼できるものが実現できませんか? 1つは動作し、もう1つは動作しない状況がありますか?

+1

'referrer' =どのサイトから来たのですか ' location.href' =実際のURI – alexP

答えて

24

document.referrerには、現在のページにリンクしているページのURIが表示されます。これは、フレームだけでなく、すべてのページで使用できる値です。

window.parentは、親フレームを与え、そのlocationはURIです。

親フレームのURIを検索する場合は、window.parent.locationを使用します。

+0

'window.parent.location'は何とか正しく動作しませんか?また、異なるドメインが問題になることはありますか? – k102

+0

私は正式な回答を与えることはできますが、親フレームがないか、スクリプトにアクセスするためのクロスサイトのアクセス許可が正しくない場合は失敗します。おそらく、このすべてのために親フレームのURIをスニッフィングするよりも良い解決策がありますが、それ以上の詳細を言うことは不可能です。 – deceze

+0

詳細は何ですか? :)このアプローチでは何のエラーも経験したことはありませんでしたが、私はそれについて確信したいと思います。 – k102

8

主な違いは、document.referrerがiframe内の現在のページにリンクしているページを指していることです。 iframeコンテンツにリンクが含まれている場合、いくつかのページをナビゲートすることができます。iframe内に読み込まれた最初のページには、親フレームURIがdocument.referrerとなります。 iframe内のリンクをクリックして読み込まれた各ページには、document.referrerにリンクを含むページのURIがあります。

同時に、window.parent.locationには、親ウィンドウ内のページのURIが常に含まれますが、サイトの起点が同じ場合にのみアクセスできます。 relaxing site origin policyについては、お客様のサイトとクライアントサイトの両方で何をすべきかを確認し、データにアクセスできるようにしてください。

私はむしろクライアントにサービスキーまたはトークンのようなものを提供して、iframeアプリケーションを使用するようにサイトを認可し、呼び出し元をクライアントとして認証するので、その呼び出し彼のサイトからです。

+0

Iframeにはコンテンツがありません。コードローダーを呼び出すためにのみ使用されます。私たちのクライアントはこのローダを直接使用しています(ページに ''を挿入してください)が、iframeが唯一の方法である場合があります。 – k102

+0

です。私はこれが自分のページに埋め込むことのできる何らかの種類のアプリだと思っています。 – SWilk

関連する問題