Как я могу хранить и получить доступ к значению на родителей IFrame с помощью jQuery?

StackOverflow https://stackoverflow.com/questions/4215280

Вопрос

У меня есть веб-сайт, который состоит из одной родительской страницы. Используя плагин 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 Это описание было немного ширем в области применения, чем мой оригинальный вопрос, я надеюсь, что кто-то найдет это полезным.

/ Томас Кан.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top