2

GWT nocache.jsの上に置くこのスクリプトがあります

<head>
    <script type="text/javascript" language="javascript">
        (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";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    </script>
        <script type="text/javascript" language="javascript" src="app/app.nocache.js"></script>
</head>
<body>
    <div id="fb-root"></div>
    <div id="rootPanel"></div>
</body>

そして、私のサイトのページの1つ(私はErrai-UIを使用しています)

これが追加されます:

    HTMLPanel likebox = new HTMLPanel("<div class='fb-like-box' " +
                    "data-href='http://www.facebook.com/platform' data-width='595' " +
                    "data-show-faces='true' data-stream='true' data-header='true'></div>");

    likepanel.add(likebox);

私が直面している問題は、GWT アプリケーションで、このパネルが挿入されたページにサイトが表示されると、DOM を見ても Facebook のようなボックスがレンダリングされないことです<div class='like-box' ...>。DOM ツリーに存在します。 .

機能するのは、現在のページで (DevMode で) ページ全体を更新する必要があることです: 例:/mysite#PageWithFBDiv

また、ページ更新のトリックは DevMode でのみ機能しますが、コンパイル時には失敗します。

4

1 に答える 1

4

Facebook Javascript SDK ドキュメントによると、div をページの上、つまりスクリプトの上に配置する必要があります。

JavaScript SDK では、fb-root 要素がページに存在する必要があります。

display: none または visibility: hidden を使用して fb-root 要素を非表示にしないでください。非表示にすると、SDK の一部が Internet Explorer で適切に動作しなくなります。

SDK は、要素を fb-root に挿入します。この要素は、本文に対して相対的に配置されるか、ページの上部に近い要素に対して相対的に配置されることが期待されます。fb-root 要素が position: absolute または position: relative の要素内にない場合に最適です。fb-root 要素を配置された要素の内部に配置する必要がある場合は、ボディの上部に近い位置に配置する必要があります。そうしないと、SDK の一部が正しく機能しない可能性があります。

このコードは、開始タグの直後に配置する必要があります。

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      appId      : 'YOUR_APP_ID', // App ID from the App Dashboard
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain communication
      status     : true, // check the login status upon init?
      cookie     : true, // set sessions cookies to allow your server to access the session?
      xfbml      : true  // parse XFBML tags on this page?
    });

    // Additional initialization code such as adding Event Listeners goes here

  };

  // Load the SDK's source Asynchronously
  // Note that the debug version is being actively developed and might 
  // contain some type checks that are overly strict. 
  // Please report such bugs using the bugs tool.
  (function(d, debug){
     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" + (debug ? "/debug" : "") + ".js";
     ref.parentNode.insertBefore(js, ref);
   }(document, /*debug*/ false));
</script>
于 2013-03-21T13:00:14.707 に答える