2012-12-19 4 views
0

내가 페이스 북 버튼을 더 SDK가 없다 나타낼 수 있습니다 : 나는 실행 내 자바 스크립트 파일 내에서 다음 페이지의 변경 때 페이스 북 버튼을 다시로드하지 않습니다FB.init 이미 호출 된 -이

<fb:like href="<%= @canonical_url %>" send="" layout="button_count"></fb:like> 
    <div id="fb-root"> </div> 
    <script> 
     // facebook recommend button 
     window.fbAsyncInit = function() { 
     FB.init({appId: 'myappid', status: true, cookie: true, xfbml: true}); 
     }; 
     (function() { 
     // delay to simulate slow loading of Facebook library - remove this setTimeout!! 
     var t = setTimeout(function() { 
      var e = document.createElement('script'); e.async = true; 
      e.src = document.location.protocol + '//connect.facebook.net/<%= locale_og_tag %>/all.js'; 
      document.getElementById('fb-root').appendChild(e); 
     }, 0); 
     }()); 
     </script> 
    </div> 

를 :

if (typeof (FB) != 'undefined') { 
    FB.init({ status: true, cookie: true, xfbml: true }); 
    } else { 
    $.getScript("http://connect.facebook.net/en_US/all.js#xfbml=1", function() { 
    FB.init({ status: true, cookie: true, xfbml: true }); 
    }); 
} 

하지만 콘솔에서 얻을 :

FB.init has already been called - this could indicate a problem 
나는이 문제를 해결할 수있는 방법

?

고맙습니다!

+1

Simple -'FB.init()'를 두 번 호출하지 말아라. ** 당신은 ** SDK를로드했다. 그렇지 않으면'FB.init()'를 호출 할 수 없다. – Lix

+0

@Lix는 대답합니다. –

+0

@fra - VTC를 "너무 지역화 된"것으로 VTC해야합니다 ... 그러나 당신이 매우 친절하게 물었 기 때문에 ...;) – Lix

답변

2

그럼 당신 있습니다 당신은 그 오류 메시지의 조언에주의 할 ... 두 번 FB.init()을 수있는 전화 : P를

당신은 한 번만 호출해야하고 SDK를하지 않고도 호출 할 수

로드 된 경우 SDK가 있어야합니다. 당신은 등 xfbml durring 초기화, ...

1

이미 window.fbAsyncInit을 사용하여 FB.init을 호출하고 있으며 첫 번째 코드 블록에 FB 스크립트를 이미로드하고 있습니다.

이렇게하면 두 번째 코드 블록을 제거해야하며 정상이어야합니다.

14

렌더링할지 여부 등 app_id과 같은 매개 변수를 설정하는 FB.init() 전화 당신은 초기화 세 가지 통화가 - FB.init을 통해이 개 명시 적 통화 및 ../all.js#xfbml=1를 통해 하나의 암시 적 호출을. #xfbml=1 부분과 FB.init 부분 중 하나를 제거하면 좋을 것입니다.

+2

그런데 # xfbml = 1의 의미는 무엇입니까? – Mico

+0

내 사용의 경우. 감사합니다 숀 –

0

로그인 양식을 다른 페이지와 구분하면됩니다. 따라서 FB.init()를 여러 번로드하지 마십시오.

관련 문제