javascript 未定義 「FBが定義されていない」を回避する方法?




undefined javascript 判定 (10)

代わりに、主な問題を解決する必要があると思います。どのソリューションがFacebookによって提供されていますか(非同期にSDKを読み込む

ロードする各ページの開始タグの直後に挿入する必要があります。

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

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

documentationから:

JavaScript用Facebook SDKには、ダウンロードまたはインストールする必要のあるスタンドアロンファイルがありません.HTMLに短いJavaScriptを挿入するだけで、SDKをページに非同期で読み込む必要があります。 非同期ロードは、ページの他の要素のロードをブロックしないことを意味します。

UPDATE:ドキュメントの最新コードを使用してください。

場合によっては、 http://connect.facebook.net/en_US/all.js読み込む際に「FBが定義されていません」という問題が発生することがありhttp://connect.facebook.net/en_US/all.js

私の問題は、時には私のウェブサイトがそのファイルをロードしないことがあるためです。 だから、何も得られず、オブジェクトFBは文字通り存在しません。

私の解決策は、これが起こったときに私のユーザーを防ぐことです、私はJavaScriptで次のコードを試してみましたが、どれもうまくいかないようです:

if (FB) {/*run the app*/} else {/*alert the user*/}
if (FB!==false) {/*run the app*/} else {/*alert the user*/}
if (FB!='undefined') {/*run the app*/} else {/*alert the user*/}

答えをありがとう!


私も同様の問題があり、Adblocker Proと判明しました。 この拡張機能や他の拡張機能が無効になっていることを確認してください。 私はこのために1時間30分を失った。 そんな奴のように感じる;)


<script>  
    window.fbAsyncInit = function() {    
        FB.init({      
            appId      :'your-app-id',      
            xfbml      :true,      
            version    :'v2.1'
        });
    };
    (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 ="// connect.facebook.net/en_US /sdk.js";     
        fjs.parentNode.insertBefore(js, fjs);
    }
    (document,'script','facebook-jssdk'));
</script> 

ドキュメンテーションから:JavaScript用Facebook SDKには、ダウンロードまたはインストールする必要があるスタンドアロンファイルがありません。代わりにHTMLの中に短いJavaScriptを挿入するだけで済みます


...
</head>
<body>
    <!-- Load Facebook SDK for JavaScript -->
    <div id="fb-root"></div>
<script type="text/javascript">
...

div id = "fb-root" / div "!!!を確認してください。実行することは非常に重要です。


FBがFacebookオブジェクトを含む変数であると仮定して、私は次のようなものを試してみましょう:

if (typeof(FB) != 'undefined'
     && FB != null ) {
    // run the app
} else {
    // alert the user
}

普通の古いJavaScriptで何かが未定義であることをテストするには、 "typeof"演算子を使うべきです。 FBオブジェクトに本当に 'undefined'という文字列が含まれていない限り、 'undefined'という文字列と比較する場所を示すサンプルはfalseと評価されます。

Firebug(Firefox)のようなさまざまなツールを使用して、Facebookファイルが読み込まれていない理由を調べることができるかどうかを確認することができます。


私はセミコロンを置いていなかったと思います; 閉じた中括弧で} window.fbAsyncInit = function() { ... };


あなたのためのソリューションがあります:)

ウィンドウが読み込まれた後にスクリプトを実行する必要があります

jQueryを使用する場合、簡単な方法を使用できます:

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

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

<script>
$(window).load(function() {
    var comment_callback = function(response) {
        console.log("comment_callback");
        console.log(response);
    }
    FB.Event.subscribe('comment.create', comment_callback);
    FB.Event.subscribe('comment.remove', comment_callback);
});
</script>

あなたは元の例に非常に近いです。 @ jAndyの提案を使うか、

if (typeof FB != 'undefined')

もしあなたがスクリプトタグを正しく持っていれば、FBがあなたのjavascriptにロードされないのはかなり奇妙です。 FB Connectコードを無効にしているブラウザにjavascriptブロッカー、広告ブロッカー、トラッキングブロッカーなどがインストールされていないことを確認してください。


FBは、bodyの直後にasync all.js includeを追加することを推奨しています。そのため、FBオブジェクトはページ内で使用するときに準備されます。

また、FBオブジェクトがロードされていることを確認するために、setTimeoutを使用して人為的に遅延させることもできます。 例えば

<script>setTimeout(function(){
FB.Event.subscribe('edge.create',
function (response) {
    alert('msg via fb');
});},2000);
</script>






facebook