0

我正在尝试在 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:baseURL 加载 UIWebView:

如何让 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
};
4

3 回答 3

2

你是对的,问题是该方案不是http或https。SDK 不支持其他方案,因此将无法初始化并且 setSize() 将不执行任何操作。不幸的是,您需要找到其他一些解决方法才能获得此功能。

于 2013-09-13T19:31:51.633 回答
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”。

于 2013-10-23T19:26:48.603 回答
0

我也遇到了这个问题,但是由于内部要求,我们不得不从 html 字符串加载 webview。我们发现,如果您将 Facebook 评论视图的值更改为“自动”,它将按预期显示。

等待 webview 完全加载完成,然后运行:

[self.webview stringByEvaluatingJavaScriptFromString: @"$(\".fb-comments span > iframe\").css(\"height\",\"auto\");"];

这为我们解决了问题。

于 2014-01-16T18:24:43.250 回答