2010-11-18 1 views
1

私は1つの親ページからなるウェブサイトを持っています。ライトボックススタイルのjQueryプラグインカラーボックスを使用して、親ページの上にオーバーレイスタイルで浮かぶiFrameの他のページを開きます。jQueryを使用してiFrameの親に値を保存してアクセスするにはどうすればよいですか?

iFrameページのJavaScriptコードでは、FacebookからJSONデータを読み込みます。 Facebookからのデータ読み込みには時間がかかるので、読み込んだデータを親ページにある変数に保存したいと思っています。

次に、オーバーレイで新しいiFrameを開くたびに、親ページの変数が空であるかどうかを確認できます。空の場合は、Facebookからデータを読み込みます。それが空でない場合は、親ページの変数からデータを取得します。

私がこれをやりたいのは、パフォーマンスを向上させ、Facebook APIへの不要な呼び出しを避けることだけです。

iFrameのjavascriptが親ページにある変数のデータを保存してアクセスできるソリューションを作成するにはどうすればよいですか?

私は実際のコードを持っていないが、擬似コードで、私はこのような何か希望:オン

FB.api("/me/friends?fields=name,first_name,picture", function(friendsData) { 
    // When this callback is executed, the data I want is 
    // now in the object: 
    friendsData.data 
}); 

:FacebookのAPIへの呼び出しは次のようになります

function loadFacebookFriends() { 
    if(parentFriendsVariable is empty) { 
     Load friends from Facebook 
    } 
    else { 
     localFriendsVariable = parentFriendsVariable 
    } 
} 

を親ページのjavascriptコードはjQueryドキュメントのreadyタグにあります。

ありがとうございます!

/トーマス・カーン

+1

親と子の「IFrame」は同じドメインにありますか? – msuhash

+0

あなたはwondow.parentを使用できません。 ? – msuhash

+0

はい、親とIframesは同じドメインの同じWebサーバーから読み込まれます。私はwindow.parent.variableを使って実験をしましたが、期待どおりに動作しません。私のコードがjQueryでラップされているという事実が原因でしょうか? – tkahn

答えて

3

私はこの問題を解決しました。実際のソースは変数にアクセスするのではなく、javascriptで変数にアクセスした方法とタイミングにエラーがあります。親ページでjQuery以外の変数を宣言すると、次のようになります。

var friendsCache = new Object; 

...それは機能しました。 IFrameのページでは、次のような値にアクセスできます。

var friends = window.parent.friendsCache; 

だから私はこのような解決策を持っています。ユーザーがFacebookの接続で正常にログインしたときに、私は、関数loadFriendsを呼び出す:

function loadFriends() { 
    if (jQuery.isEmptyObject(friends)) { 
     FB.api("/me/friends?fields=name,first_name,picture", renderFriends); 
    } 
    else { 
     renderFriends(); 
    } 
} 

function renderFriends(friendsData) { 
    if (friendsData != undefined) { 
     if (!(jQuery.isEmptyObject(friendsData))) { 
     friends = friendsData.data; 
     window.parent.friendsCache = friends; 
     } 
    } 
    // Do the stuff you want to do when the friends are loaded 
} 

限り、親ページがリロードされていないとして、私はグラフからFacebookの友達リストをロードする必要はありませんAPI。代わりに、キャッシュ変数からロードします。これにより、パフォーマンスが大幅に向上します。

この説明は、私の元の質問よりも範囲が少し広がっていますが、誰かがそれを役に立つと願っています。

/トーマス・カーン

関連する問題