2015-09-28 75 views
0

我在我的頁面上有一個Facebook按鈕。它調用一個共享彈出窗口。Facebook分享彈出式按鈕停止工作後第一次點擊

問題是該按鈕只在第一次點擊時工作。第二次,第三次點擊不會做任何事情。我總是需要刷新頁面。

我是新手。你能幫我解決這個問題嗎?

謝謝。

<div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'zzzzzzzzzz', 
      status  : true, 
      cookie  : true, 
      xfbml  : true 
     }); 

     FB.ui(
      { 
      method: 'feed', 
      name: 'Bitcoin Catcher Faucet & Rotator', 
      link: 'http://bitcoin-catcher.com', 
      picture: 'http://bitcoin-catcher.com/wp-content/uploads/2015/08/icon.png', 
      caption: 'Only 1000+ Rewards Faucet & Rotator', 
      description: 'Earn FREE Bitcoins Easier & Faster! Only 1000+ Rewards per Claim!' 
      }, 

      function(response) { 
      if (response && response.post_id) { 
    unhide('claim', ''); 
      } else { 
      } 
      } 
     ); 

     }; 

    function fb_callout() { 

     (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> 

<img alt="Share on Facebook" src="http://bitcoin-catcher.com/wp-content/uploads/2015/09/facebook-share-button.png" width="180" onclick="fb_callout();" style="cursor: pointer;" /> 

回答

1

FB.ui的呼叫應該在fbAsyncInit之外。將其放置在「共享」按鈕的單擊事件處理程序中。

在您的代碼示例中,FB JS SDK是,每次點擊都會加載這不是你想要的。

即使它第一次工作,因爲一旦它被加載,SDK會調用fbAsyncInit,在您的示例中又錯誤地再次顯示通過FB.ui調用的進紙對話框,重新加載SDK會斷開API以供後續調用。 SDK不應該每次都加載。

您想要的只是在頁面加載時加載SDK一次(它是異步的,所以它不會阻止瀏覽器),然後爲調用FB.ui的按鈕分配一個點擊處理程序。

它會看起來類似於下面的東西

<body> 
<img alt="Share on Facebook" onclick="fb_callout();" /> 

<script> 
    // Handler for click event 
    function fb_callout() { 
    FB.ui({...}, function(response) {}); 
    } 

    // This is called when the SDK js file is loaded by the browser 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'zzzzzzzzzz', 
     status  : true, 
     cookie  : true, 
     xfbml  : true 
    }); 
    } 

    // This loads the FB SDK js 
    (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> 
</body> 
+0

Marekful。我確實通過這種方式更改了代碼,但沒有成功。這次第一次點擊也停止了。你能舉一個代碼的例子嗎? – Rafael

+0

請看看我現在發佈的新代碼... – Rafael

+0

只要在我的答案中這樣做。仔細看一下。你仍然把所有的東西放在fb_callout函數中;) – marekful

0

我沒有這樣的,什麼也沒有發生......

<img alt="Share on Facebook" src="http://bitcoin-catcher.com/wp-content/uploads/2015/09/facebook-share-button.png" width="180" onclick="fb_callout();" style="cursor: pointer;" /> 

<div id="fb-root"></div> 
<script> 

function fb_callout() { 

    FB.ui(
     { 
     method: 'feed', 
     name: 'Bitcoin Catcher Faucet & Rotator', 
     link: 'http://bitcoin-catcher.com', 
     picture: 'http://bitcoin-catcher.com/wp-content/uploads/2015/08/icon.png', 
     caption: 'Only 1000+ Rewards Faucet & Rotator', 
     description: 'Earn FREE Bitcoins Easier & Faster! Only 1000+ Rewards per Claim!' 
     }, 

     function(response) { 
     if (response && response.post_id) { 
unhide('claim', ''); 
     } else { 
     } 
     } 
    ); 

    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'xxxxxxxxxxx', 
     status  : true, 
     cookie  : true, 
     xfbml  : true 
    }); 

    (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> 
相關問題