刷新后FB.Canvas.setSize失败了吗? (facebook iframe申请)

时间:2010-07-13 06:53:53

标签: facebook

我创建了一个facebook连接应用程序iframe。我在apps.facebook.com/app-name下使用它。

似乎刷新后,setSize()方法失败了。有时工作,有时不...(在最新的Firefox和IE下)是否有解决方案?你会建议使用旧的API吗?

测试用例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>test</title>
    <meta name="description" content="test">
</head>
<body>
    <div id="fb-root"></div>
    <script type="text/javascript">
    window.fbAsyncInit = function() {
        FB.init({appId: 'XXXXXXXXX', status: true, cookie: true, xfbml: true});
        FB.Canvas.setSize({ width:760,height:3000 });
    };

    (function() {
        var e = document.createElement('script');
        e.type = 'text/javascript';
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
    }());
    </script>
    <div style="height:2000px;background:blue;width:760px;">
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

如果由于某种原因设置了window.name,FB.setAutoSize将不起作用,http://bugs.developers.facebook.net/show_bug.cgi?id=19720在我的情况下,它以某种方式连接到jquery $ .data

    window.fbAsyncInit=function(){

        FB.Canvas.setSize = function(b) { 
            if (typeof b!="object") 
                b={};
            b=b||{};
            if (b.width==null||b.height==null)
                b=FB.copy(b,FB.Canvas._computeContentSize());
            b=FB.copy(b,{frame:'iframe_canvas'});
            if (FB.Canvas._lastSize[b.frame]) {
                var a=FB.Canvas._lastSize[b.frame].height

                if(FB.Canvas._lastSize[b.frame].width==b.width&&(b.height<=a&&                     (Math.abs(a-b.height)<=16)))
                    return false;
            }
            FB.Canvas._lastSize[b.frame]=b;FB.Arbiter.inform('setSize',b);
            return true;
        }

        FB.init({
            appId:"<?php echo FB_APP_ID; ?>",
            status:true,
            cookie:true,
            xfbml:true
        });

        FB.Canvas.setAutoResize()
    };