我正在尝试在UIWebView中加载以下html。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'myAppId',
status : true,
xfbml : true
});
FB.Event.subscribe("xfbml.render", function(response) {
FB.Canvas.setSize();
});
};
(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 = "http://connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-comments" data-href="http://www.google.com/" data-num-posts="10"></div>
</body>
</html>
在浏览器中,它会正确显示注释框,FB.Canvas.setSize()会适当调整高度(不使用iframe的跨度高度设置为160)。
此setSize()函数似乎在UIWebView内部不执行任何操作,可能是因为url的方案不是http或https。我无法验证这一点,因为Safari调试器没有向我显示“不安全的Javascript尝试”消息。
我正在使用loadHTMLString加载UIWebView:baseURL:
如何让facebook评论框具有合适的高度?
旁注:
类似的问题:Unable to load full Facebook comment plugins inside an iOS UIWebView
在facebook的all.js中徘徊我在评论函数中找到了这个代码(如果你正在寻找'sdk.XFBML.Comments')来设置高度
getSize: function() {
if (this._attr.mobile) return {
width: '100%',
height: 160
};
return {
width: this._attr.width,
height: 160
};
答案 0 :(得分:2)
你是对的,问题是该方案不是http或https。 SDK不支持其他方案,因此无法初始化,setSize()将不执行任何操作。不幸的是,您需要找到一些其他解决方法才能获得此功能。
答案 1 :(得分:2)
这里的问题相同。解决方案不是使用本地HTML文件(或HTML字符串)。将HTML文件上传到服务器并使用:
NSURL *url = [NSURL URLWithString:@"http://www.blablblab.com/yourfile.html"];
[self.webview loadRequest:[NSURLRequest requestWithURL:url]];
而不是:
[self.webview loadHTMLString:localString baseURL:nil];
我还没有发现为什么文件在服务器上时布局有差异,但是当它是本地文件时,我的Facebook评论视图的高度总是降低到“高度:160”。
答案 2 :(得分:0)
我也遇到过这个问题,但由于内部要求,我们不得不从html字符串加载webview。我们发现,如果您将Facebook评论视图的值更改为“自动”,它将按预期显示。
等待webview完全加载,然后运行:
[self.webview stringByEvaluatingJavaScriptFromString: @"$(\".fb-comments span > iframe\").css(\"height\",\"auto\");"];
这解决了我们的问题。