2013-05-14 6 views
0

У меня есть webapp, который работает с jQuery Mobile (полная навигационная система ajax). Я инициализирую SDK Facebook на jQueryMobile pageinit событие (каждая страница называется).С JQueryMobile, Facebook JS SDK не работает после смены страницы

jQuery(document).on('pageinit', function (event) { 
    // load FB SDK 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'MYAPPID', 
      channelUrl : '//URL/channel.html', 
      status  : true, 
      xfbml  : true, 
      oauth  : true 
     }); 
     FB.Event.subscribe('auth.authResponseChange', getCurrentUser); 
    }; 
    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    // bind a button to get current user manually 
    $('.findme').off('click'); 
    $('.findme').on('click', getCurrentUser); 
}); 
function getCurrentUser(response) { 
    FB.api("/me", function (response) { 
     if (window.console && window.console.log) console.log(response.name); 
    }); 
} 

И HTML содержит

<button class="findme">Click to get infos about me</button> 

Этот код работает на первой странице. Я меняю страницу (ajax call), она не работает на моей второй странице. Я перезагружаю (F5) свою вторую страницу, это работает.

Вы когда-нибудь видели эту проблему? У вас есть идея?

ответ

0

Если вы используете ajax для смены страниц, вам не нужно (и не следует) повторно инициализировать FB SDK каждый раз. Кроме того, вы загружаете его асинхронно, поэтому ему не нужно ждать pageinit, но вам нужно связать событие click внутри функции window.fbAsyncInit. Эта функция запускается, как только загружается FB SDK.

0

Вы когда-нибудь видели эту проблему?

Я думаю, что его проблема обычно ...

// связать кнопку, чтобы получить текущий пользователь вручную $ от ('нажмите ') (' FindMe.'). $ ('. Findme'). On ('click', getCurrentUser);

Если вы отключите кнопку для другого, JQuery не будет распознавать новую кнопку таким образом. Вместо этого используйте делегат on.