我正在构建一个GWT应用程序,并试图在某些地方动态添加Facebook评论框。这工作正常,但facebook SDK没有正确计算高度。它始终设置为160px。
这意味着第一条评论中只有一半是可见的,即使有多条评论(即它明显减少一半)。如果我在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>
希望有人可以提供帮助。
答案 0 :(得分:1)
完成了工作。
在JSNI中,我应该分别使用$ doc和$ wnd,而不是文档和窗口。 https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#writing
在我的辩护中,我试过这个,但缺少的成分是我需要将FB对象引用为$ wnd.FB,例如:
$ wnd.FB.init(...)和$ wnd.FB.XFBML.parse(...)
希望这有助于某人。