2011-02-04 5 views
4

Facebookのアプリケーションでは、トップフレーム(メインウィンドウ)のURLを確認し、それに応じてコンテンツを表示する必要があります。トップフレームのURLを取得する

私は、次を使用してみました:

ページはインラインフレーム内にない場合は、しかし、ページはインラインフレーム内にロードされたときによく働く
if (top.location.toString().toLowerCase().indexOf("facebook.com") <0) { ... } 

(Facebookのアプリケーションとして使用する場合それがないとして)コード生成する

"Uncaught TypeError: Property 'toString' of object # is not a function".

私はこのコードを(ブラウザとの互換性 - 多分jQueryと)修正する方法はありますか?

ありがとうございます!

ジョエル

+1

あなたはで取得することはできません一番上の場所ですが、document.referrer文字列を使用すると、親にアクセスできます。以下の回答を参照してください。 – mcanfield

答えて

6

あなたは異なる文書ドメイン間でtop.locationにアクセスすることを許可されていないことを持っている問題。

これはブラウザに組み込まれているセキュリティ機能です。

Read up on XSS、なぜセキュリティ対策が実施されている:)

あなたはまた、約the same origin policy

+0

興味深いです...私は現在、iframe経由でページを表示しているかどうかを知るための回避策はありますか? (XSSに関するあなたの編集を見ました - それに感謝します。たとえば、トップフレームのクッキーへのアクセスが問題になる可能性があることを理解しています。しかし、ホスト名を取得する必要があります:/) – Joel

+2

iframeにいないなら 'window.top === window'はtrueを返します –

+0

魅力のように動作します、thnx :) – Joel

0

あなたはこれを試していました読むことで多くのことを学ぶことができます。

var location = top.location.toString().toLowerCase(); 
if (location.indexOf("facebook.com") <0) { ... } 
+0

同じでなければなりません。 – Joel

1

これは仕事ができると:

if (self!=top && document.referrer.toLowerCase().indexOf("facebook.com") <0) { ... } 

...あなたがナンバーでない限りフレームの内部を移動する。

しかし、それは本当にクロスオリジンの懸念は、このトップウィンドウの場所へのアクセスを防止することができますことは事実です^^

8

良い解決策ではありません。しかしiframeの親ウインドウの位置がほしいのであれば、document.referrerの文字列でそれを得ることができます。 URLをつかむだろう、あなたのiframe内

:私は私自身のiframeのアプリで正常にこれを使用しました

var parentURL = document.referrer

https://developer.mozilla.org/en-US/docs/Web/API/document.referrer

。また、iframe内をナビゲートするとリファラーが変更されることに注意してください。

ニコラスZakasが彼のブログの書き込みアップを持っている:マーティンJespersenで http://www.nczonline.net/blog/2013/04/16/getting-the-url-of-an-iframes-parent/

3

は修正をadviced、私は、iframe内のアドレスをチェックして、先頭アドレスをスタンダールできます

//this is fix for IE 
if (!window.location.origin) { 
    window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); 
    } 

//and here we will get object of address 
var urls = (window.location != window.parent.location) ? document.referrer: document.location; 

//Martins adviced fix for checking if You are not in iFrame  
if (window.top === window) { 
    urls = urls.origin; 
} 

//and now indexOf works in both ways - for iFrame and standart top address 
if (urls.indexOf("facebook.com") != -1) { 
    //do stuff 
} 
関連する問題