0

私はGWTアプリケーションを構築していて、特定の場所にFacebookのコメントボックスを動的に追加しようとしています。Facebook SDKが高さを正しく計算していないことを除いて、これは正常に機能しています。常に160pxに設定します。

これは、複数のコメントがある場合でも、最初のコメントの半分しか表示されないことを意味します(つまり、目に見えて半分にカットされます)。GWTの外部で同じコードを使用すると、正常に機能します(つまり、高さが正しく計算されます)。

Facebook SDKがボックスの高さを計算する方法を知っている人はいますか?または他に何を試すことができますか?


詳細:

FacebookSDKを次のように初期化します。

public static native void initFacebookSDK()
/*-{
    window.fbAsyncInit = function() {
        // init the FB JS SDK
        FB.init({
            appId : '<my-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
    (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, false));
}-*/;

次のようにdivを追加します。

//_root is a vertical panel
_root.add(new HTML("<div id=\"mydiv\"></div>"));

次に、次のようにdivにデータを入力します。

public static native void showComments(String currentUrl_)
/*-{
    var mydiv = $doc.getElementById('mydiv');
    mydiv.innerHTML = "<fb:comments href='" + currentUrl_
            + "' num_posts='5' width='422'></fb:comments>";
    FB.XFBML.parse(mydiv);
}-*/;

問題は、FacebookSDKが常にdivに次の情報を入力することです。

<span style="height: 160px; width: 422px;">
  <iframe ...>...</iframe>
</span>

一方、GWTを使用しない場合、高さパラメーターは適切に変更されます。例:

<span style="height: 1469px; width: 422px;">
  <iframe ...>...</iframe>
</span>

誰かが助けてくれることを願っています。

4

1 に答える 1

1

それを解決しました。

JSNIでは、documentとwindowの代わりに、それぞれ$docと$wndを使用する必要があります。https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#writing

私の弁護ではこれを試しましたが、不足している要素は、FBオブジェクトを$wnd.FBとして参照する必要があることでした。例:

$ wnd.FB.init(...)および$ wnd.FB.XFBML.parse(...)

これが誰かを助けることを願っています。

于 2012-11-15T11:37:23.967 に答える