2013-08-13 2 views
0

페이스 북 SDK와 jQuery를 모두 사용하고 있습니다 ... 어떤 이유로 페이스 북 SDK 로딩 중 $이 더 이상 jQuery 객체로 작동하지 않습니다. 모든 jQuery 호출은 여전히 ​​작동하지만 $ 대신 jQuery을 사용해야합니다. 아래 예제를 참조하십시오. 또한 바닥 글에 jQuery와 다른 코드가 있는데 $도 거기에서 작동하지 않습니다. 모든 기능이 완벽하게 작동하지만이 점이 싫고 $을 jQuery의 바로 가기로 사용할 수 있기를 원합니다!$을 다시 받으려면 어떻게해야합니까?

<script type='text/javascript' src='http://x.com/wp-includes/js/jquery/jquery.js?ver=1.10.2'></script> 

<script> 
window.fbAsyncInit = function() { 
    FB.init({ // (this code straight from FB developer docs) 
     appId: '1234123412341234', 
     channelUrl: '//mysite.com/channel.html', 
     status: true, 
     cookie: true, 
     xfbml: true 
    }); 

    function checkLoginStatus(response) { 
     if(response && response.status == 'connected') { 
      jQuery('#login-btn').hide(); 
      jQuery('#logout-btn').show(); 
      console.log('User ID: ' + response.authResponse.userID); 
     } else { 
      jQuery('#login-btn').show(); 
      jQuery('#logout-btn').hide(); 
     } 
    } 

// Load the SDK asynchronously (this code straight from FB developer docs) 
(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 = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 
</script> 
+0

도있다. – Esailija

+0

나는 jQuery와의 충돌 가능성에 대해 문서에서 아무것도 찾을 수 없기 때문에 나중에 놀랐다. 나는 코드에서 다른 JS 비트를 잘라내서 범인을 식별 할 수 있는지 확인하려고합니다. 어쨌든, 지금 당장은이 질문이 선다. 나는 커다란 답을 얻었다. 의견을 보내 주셔서 감사 드리며 FB SDK를 살펴 보시기 바랍니다. – Eric

답변

1

단지 자동 실행 기능을 이용하고, 인수로서 $jQuery 통과.

jQuery.noConflict(); 
(function ($) { 
    FB.init({ // (this code straight from FB developer docs) 
     appId: '1234123412341234', 
     channelUrl: '//mysite.com/channel.html', 
     status: true, 
     cookie: true, 
     xfbml: true 
    }); 

    function checkLoginStatus(response) { 
     if(response && response.status == 'connected') { 

      $('#login-btn').hide(); 
      $('#logout-btn').show(); 

      console.log('User ID: ' + response.authResponse.userID); 

     } else { 

      $('#login-btn').show(); 
      $('#logout-btn').hide(); 

     } 
    } 
})(jQuery); 

당신은 $ 사용할 수 있습니다 더 here

+1

이것이 내가 선호하는 방법입니다. 또한, RequireJS (또는 유사)는 비슷한 종류의 "종속성 삽입"에 사용될 수 있습니다. – user2246674

0

하나의 라이브러리를 읽을 수 있습니다. 그래서 당신은 jQuery 나 FB API를 다른 것에 할당해야합니다. 예를 들어 이렇게 할 수 있습니다.

window._ = window.jQuery 

내가 ** ** 변수`도 로컬 $`을 사용하지 않습니다 확실히 전체 소스 코드와 페이스 북 SDK를 검색 http://api.jquery.com/jQuery.noConflict/

+0

(추가) 별명 지정에'jQuery.noConflict'를 사용하십시오. 또한 jQuery clobbering이 있으면 제거됩니다. 그러나 '_'은 일반적으로 밑줄에 사용됩니다 .js .. – user2246674