2013-03-04 49 views
1

與此問題類似:FB.api only loads on first AJAX call to page有沒有辦法爲每個AJAX頁面加載初始化JS SDK?

由於我的網站結構,頁面通過AJAX加載。一切正常,除了第二次載入window.fbAsyncInit函數的頁面加載後,它不起作用。在控制檯上沒有顯示任何錯誤,所有顯示的是我的auth-loggedout div內容,裏面有facebook登錄按鈕,但點擊它沒有響應。

我知道確定我已登錄,因爲在上一頁加載時我只是使用api發佈到我的牆上。

有沒有辦法改變初始化,以便它可以在每個頁面加載?

// Init the SDK upon load 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '<?php echo $appID; ?>', // App ID 
     channelUrl : '//domain.co.uk/myoe/channel.html', // Path to your Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 


    // listen for and handle auth.statusChange events 
    FB.Event.subscribe('auth.statusChange', function(response) { 
     // lots of code 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "https://connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 

回答

1

OK,設法解決,最終它:

if (typeof FB !== 'undefined') { 
    // your code from window.fbAsyncInit = function() { 
    // but WITHOUT FB.init({...}); 
} 

所以如果你把公共代碼的功能,你可以再從兩個這樣你就不會重複自己調用該函數。

非常令人沮喪的問題的一個直截了當的答案。

相關問題