2011-12-20 10 views
1

トップセットアップバーとしてのfacebook canvasアプリケーションがあります。私は、アプリケーションを気に入っているユーザーを含むIFrameを開くようなボタンを追加しました。アプリケーションを好き/好きにするオプションがあります。クリックしたときにそのiframeを閉じると思われるボタンをそのiframeに追加しました。私はこの機能を実行作成親が同じドメインにいないときにそのiframe内のiframeを閉じる

function closeIFrame() { 
    window.parent.closeLikeIframe(); 
} 

ボタン:私は持っているのiframe HTML内側そう

。親ページ内の

私は、次のコードを持っている:

function closeLikeIframe() { 
    var iframe = document.getElementById('likeIframe'); 
    iframe.style.display = "none"; 
} 

はそうFirefoxで、それは素晴らしい作品が、それは他のブラウザではありません。私はアクセスを許可しないようにIFrameの自体が私のサーバー上で座っている間のメインページはFacebookを利用して座っているので、私はjavascriptのエラー

unsafe JavaScript attempt to access frame with URL http://X from frame with URL http://Y. Domains, protocols and ports must match. 
user_like.html:15Uncaught TypeError: Property 'closeLikeIframe' of object [object DOMWindow] is not a function 

それが機能closeLikeIframeが見つからないことができます。

IFrameを正しく開いたり閉じたりする方法はありますか?

おかげ

+1

私はfacebookでの公開はありませんが、一般的にJavaScriptは別のドメインのものにアクセスすることはできません。また、プロジェクトを再概念化する以外にはJavaScriptを使用できません。 – RoToRa

答えて

1

あり少しハックである一般的な問題を回避するにはだ、と最初の1の内側に別のiframeを置く含まれます

+------------------------------------------------+ 
| A: Main page on FB        | 
|            | 
| +---------------------------------------+ | 
| | B: Iframe (page on your server)  | | 
| |          | | 
| | +--------------------------------+ | | 
| | | C: Another iframe, page on FB | | | 
| | |        | | | 
| | +--------------------------------+ | | 
| +---------------------------------------+ | 
+------------------------------------------------+ 

彼らは同じドメインからであるため、AとCが通信することができます。

CだけでURLパラメータをリッスンする小さなスクリプトが含まれており、

A.でメソッドを呼び出しBは、適切なURLパラメータを持つCのsrc属性を設定します。

編集:This postは、実際の図やすべてを使って、さらによく説明しています。

+0

ありがとうございます。素晴らしいアイデアのように見えます。私はあなたの答えを受け入れるでしょう。私はiframeの代わりにdivを使用して問題を解決しました。 iframeを使用しなければならない場合、このソリューションは完璧です。 – ufk

関連する問題