0

我正在构建一个 GWT 应用程序,并尝试在某些地方动态添加 facebook 评论框。这工作正常,除了 facebook SDK 没有正确计算高度。它始终将其设置为 160 像素。

这意味着只有一半的第一条评论是可见的,即使有多个评论(即它被明显地切成两半)。如果我在 GWT 之外使用相同的代码,它工作正常(即高度计算正确)。

有人知道 facebook SDK 如何计算盒子的高度吗?或者我还能尝试什么?


细节:

我初始化 facebook SDK 如下:

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);
}-*/;

问题是 facebook SDK 总是使用以下内容填充 div:

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

而如果我不使用 GWT,height 参数会相应更改,例如:

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

希望有人可以提供帮助。

4

1 回答 1

1

解决了。

在 JSNI 中,我应该分别使用 $doc 和 $wnd,而不是 document 和 window。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 回答