web-dev-qa-db-ja.com

Javascript:私のfbAsyncInit()メソッドが呼び出されることはありません

Facebookの開発者Webサイトの このページ からコードをコピーしていますが、fbAsyncInit()メソッドは起動しません。 このページ も読みました。コードをさまざまな方法で微調整しましたが、メソッドを起動できません。あなたの考え?

また、このコードを実行してChrome(Macの場合)、Firebug liteを実行しようとすると、「FirebugLiteをこのページにロードできません」というエラーが表示されます。

これがコードです...

<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '1234567890', // App ID
      channelUrl : '//localhost/test.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    alert("this statement never gets called either");
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));
</script>
</script>
</body>
</html>
9
BeachRunnerFred

私も同じ問題を抱えていました。 JavaScriptライブラリをロードしたようです//connect.facebook.net/en_US/all.js非同期ロードの前の別の場所。

それはおそらく物事を少し混乱させました。

時期尚早のロードタグ定義を削除しましたが、今は問題ありません。

7

同期読み込みに問題がありますか?

    <script src="//connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId      : 'YOUR_APP_ID',
    channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : true  // parse XFBML
  });
</script>
5
Mikey G

変更する必要があります:

 js.src = "//connect.facebook.net/en_US/all.js";

に:

 js.src = "http://connect.facebook.net/en_US/all.js";
5
Martín

この答えはおそらく遅すぎて、多くの場合助けにはなりませんが、ディーセントワークの後の私のFirefoxブラウザは明らかに少し狂ってその正確なエラーを引き起こすことがわかりました...ただいまいましいことを再起動してください

ファイルは両方ともtest.htmlと呼ばれ、channelUrlはtest.htmlであると想定されているため、循環参照を作成しています。適切なchannelUrlの場合、1行だけが含まれているはずです。

<script src="//connect.facebook.net/en_US/all.js"></script>

http://developers.facebook.com/docs/reference/javascript/

チャネルファイルは、特定のブラウザでのクロスドメイン通信に関するいくつかの問題に対処します。 channel.htmlファイルの内容は1行だけにすることができます。

<script src="//connect.facebook.net/en_US/all.js"></script>

チャネルファイルをできるだけ長くキャッシュすることが重要です。このファイルを提供するときは、有効期限の長い有効なExpiresヘッダーを送信する必要があります。これにより、スムーズなユーザーエクスペリエンスにとって重要なチャネルファイルがブラウザによって確実にキャッシュされます。適切なキャッシュがないと、ドメイン間の通信が非常に遅くなり、ユーザーのエクスペリエンスが大幅に低下します。 PHPでこれを行う簡単な方法は次のとおりです。

 <?php  $cache_expire = 60*60*24*365;  header("Pragma: public");  header("Cache-Control: max-age=".$cache_expire);  header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');  ?>  <script src="//connect.facebook.net/en_US/all.js"></script>

ChannelUrlパラメーターはオプションですが、推奨されます。チャネルファイルを提供すると、3つの特定の既知の問題に対処するのに役立ちます。まず、フレーム間で通信するコードを含むページでは、ソーシャルプラグインがchannelUrlなしで空白として表示される場合があります。次に、channelUrlが提供されておらず、ページに自動再生オーディオまたはビデオが含まれている場合、クロスドメイン通信のためにページがバックグラウンドで2回ロードされているため、ユーザーはオーディオの2つのストリームを聞く可能性があります。第三に、チャネルファイルは、サーバー側のログに余分なヒットが含まれるのを防ぎます。 channelUrlを指定しない場合は、ログからfb_xd_bustまたはfb_xd_fragmentパラメーターを含むページビューを削除して、適切なカウントを確保できます。

ChannelUrlは、SDKを含めるページと一致する完全修飾URLである必要があります。つまり、サイトがwwwを使用して提供されている場合、チャネルファイルドメインにはwwwが含まれている必要があります。また、ページでdocument.domainを変更する場合は、channel.htmlファイルでも同じdocument.domainを変更する必要があります。プロトコルも一致する必要があります。ページがhttps経由で提供される場合、channelUrlもhttpsである必要があります。スクリプトsrcにも一致するプロトコルを使用することを忘れないでください。上記のサンプルコードは、ほとんどのhttpsケースを適切に処理するプロトコル相対URLを使用しています。

0
DMCS

アプリIDを変更してから作業を開始してください

  <script>
  window.fbAsyncInit = function() {
    FB.init({
      appId            : 'your-app-id',
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v2.11'
    });
  };

  (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 = "https://connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>