0

「公式」の方法は、これです:別の方法FBのマニュアルによって提案SDKをロードする

<script>(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/all.js#xfbml=1&appId=APP_ID"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

しかし、私はすでに、それはこのように行わ見てきました:

<script src="http://connect.facebook.net/en_US/all.js"></script> 
... 
FB.init(APP_ID, true, true, true); 

これらの2つの違いは何ですか?

私はソーシャルプラグインを使用するGWTアプリケーションを作成しています。それをロードする最善の方法は何でしょうか?私はGWTの多くを書いたものの

答えて

1

私は、FacebookのAPIを直接働いていませんでした、ページレベルのJavaScript

との統合は、ScriptInjectorクラスを見てみましょう - ひとつの方法は、文字列を挿入することができます、もう1つは、URLからスクリプトを挿入し、読み込まれたときにコールバックを取得できるようにします。

別の考え:JSNIでは、Javaアプリケーション内からjavascriptを呼び出すことができます。あなたは、ページの読み込みで、そのスクリプトタグを含めることができる場合は、JavaメソッドからそのFB.initを呼び出すことができます。

private native void nativeFbInit(String appId) /*-{ 
    $wnd.FB.init(appId, true, true, true); 
}-*/; 
+0

「ScriptInjector」を使用してFB SDKを読み込むには、ScriptInjector.fromURL(...)。setCallback(...)。setWindow(ScriptInjector.TOP_WINDOW).inject()を使用する必要があります。 ; 'スクリプトは' $ wnd.FB ... 'で呼び出すことができます。 – Marcelo

+0

ああ - 私のための新しいものです。共有してくれてありがとうございます。私はsetCallbackが無効であると仮定し、それをカスタマイズするための他のオプションがあることを認識しませんでした。 –

1

違いは、後には同期されている間、最初のアプローチが非同期であるということです。 ページのロード/レンダリングを高速にしたい場合は、この目的のためにfb sdkを使用して(ページを表示して)最初の行に行くことができます。

1

最初の方法をお勧めします。これは、ライブラリを非同期的に読み込んで残りのページ読み込みをブロックするのを防ぎます。たとえば、2番目の方法を使用していて、FacebookがJSファイルの提供に応答するのが遅かったり遅かったりする場合、スクリプトをダウンロードしようとしている間にページ全体が「座っている」可能性があります。

しかし、私自身の経験では、時々、非同期バージョンで「奇妙」が発生し、2番目の方法(同期的な方法)を使用して終了し、前回の最後の方法であることを確認しました私の</body>がページにあります。

関連する問題