лайтбокс не загружает плагин Facebook после закрытия - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть этот скрипт:

<a id="editprofile" href="#edit_profile">123</a>
<div style="display: none;">
<div id="edit_profile" style="width:640px;height:auto;overflow:auto;">
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"> </script><fb:comments href="apps.facebook.com/conteststwenty/" num_posts="2" width="620"></fb:comments>
</div>
</div>

и js:

$("#editprofile").fancybox({
      'titlePosition'        : 'inside',
     'transitionIn'        : 'none',
     'transitionOut'        : 'none'
 });

или см. jsfiddle .

происходит то, что у меня есть простая загрузка Facebookplugin внутри (может быть любой плагин FB)

и после закрытия лайтбокса во второй раз, когда я его открываю, плагин не появляется. Любые идеи, как заставить это работать, или возможно предложить другой лайтбокс, который добьется цели?

Ответы [ 3 ]

0 голосов
/ 02 сентября 2011

Хотя @WTK прав насчет атрибута src и поведения Fancybox. Изменение источника библиотеки - это BAD практика и последнее, что вы можете сделать. Лучшим подходом может быть использование события onStart:

$("#editprofile").fancybox({
    'titlePosition': 'inside',
    'transitionIn': 'none',
    'transitionOut': 'none',
    'onStart': saveSrc,
});
var src = '';
var $commentsContainer = $("#edit_profile");
function saveSrc() {
    if(!src) {
        // First time here, we still have the src attribute so 
        // grab it and save it for later!
        src = $commentsContainer.find('iframe').attr('src');
    } else {
        $commentsContainer.find('iframe').attr('src', src)
    }
}

Также вам не следует добавлять fb-root и библиотеку Facebook JS в лайтбокс.
Демо: ссылка

0 голосов
/ 02 сентября 2011

Я согласен с обоими решениями. Вы можете попробовать это тоже

$(document).ready(function() {
var mySRC = "";
$("#editprofile").fancybox({
    'titlePosition': 'inside',
    'transitionIn': 'none',
    'transitionOut': 'none',
    'onComplete': function() {
        mySRC = $('#edit_profile iframe').attr('src');
    },
    'onClosed': function() {
        $('#edit_profile iframe').attr('src', mySRC);

    }
});
});

вот тебе скрипка http://jsfiddle.net/muHXe/7/

0 голосов
/ 02 сентября 2011

Второй раз не отображается, потому что обработчик fancybox onclose сбрасывает атрибут src любого iframe, который он находит в своем содержимом.Поэтому в следующий раз, когда вы откроете fancybox, в iframe, предполагающем наличие содержимого FB, будет src

. Чтобы преодолеть это, вы можете закомментировать следующую строку в fancybox js src:

content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');

Проверить обновленный примерздесь: http://jsfiddle.net/muHXe/4/

...