Как я могу хранить и получить доступ к значению на родителей IFrame с помощью jQuery?
Вопрос
У меня есть веб-сайт, который состоит из одной родительской страницы. Используя плагин jQuery jQuery Lightbox, я открываю другие страницы в iframes, которые плавают на вершине родительской страницы, стиль наложения.
В коде JavaScript на страницах IFrame я загружаю данные JSON из Facebook. Поскольку загрузка данных из Facebook требует времени, я хочу хранить данные, которые я загружал в переменной, которая живет на родительской странице.
Затем каждый раз, когда я открываю новый iframe в наложении, я хочу проверить, является ли переменную родительской страницы пустой или нет. Если он пуст, я загружаю данные из Facebook. Если он не пуст, я получаю данные из переменной на родительской странице.
Единственная причина, по которой я хочу сделать это, растут производительности и избегая ненужных вызовов на API Facebook.
Как создать решение, в котором JavaScript в iFrame может хранить и получать доступ к данным из переменной, которая живет на его родительской странице?
У меня нет настоящего кода, но в псевдо-коде я хотел бы что-то вроде этого:
function loadFacebookFriends() {
if(parentFriendsVariable is empty) {
Load friends from Facebook
}
else {
localFriendsVariable = parentFriendsVariable
}
}
Вызов API Facebook выглядит так:
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
});
На родительской странице мой код JavaScript находится в теге готовности документов jQuery.
Заранее спасибо!
/ Томас Кан.
Решение
Я решил проблему. Реальный источник этого не обращался к переменной, но ошибку в том, как и когда я добрался до переменных в моем JavaScript. Когда я объявил переменные за пределами jQuery на родительской странице, как это:
var friendsCache = new Object;
...это сработало! На моей странице Iframe я могу получить доступ к значению:
var friends = window.parent.friendsCache;
Так что теперь у меня есть решение, которое выглядит что-то вроде этого. Когда пользователь успешно вошел в систему с Facebook Connect, я называю функциональные нагрузки:
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. Вместо этого я загружаю их из моей переменной кэша, что дает мне высоко заметное увеличение производительности.
EventHough Это описание было немного ширем в области применения, чем мой оригинальный вопрос, я надеюсь, что кто-то найдет это полезным.
/ Томас Кан.