当我在Opera中调用FB.Canvas.setSize时,javascript FB对象没有准备好

时间:2012-02-29 18:34:37

标签: javascript facebook opera facebook-javascript-sdk

在我的FB应用程序中,我正在调用FB.Canvas.setSize();使页面符合我的内容的长度。这在Chrome,Firefox,Safari和IE中正常运行。然而,似乎Opera比其他浏览器更快地调用它,并且在FB对象准备好接受这样的请求之前尝试调整大小。它不会抛出JS异常,因此FB对象不为null,但无法调整页面大小。如果我在调用resize之前放入断点并等待几秒钟然后让它通过它就会调整页面的大小。此外,其他FB功能正在运行(请求,馈送帖等)。 Opera和Facebook JS SDK是否存在任何已知问题或者我应该如何考虑Opera如何执行Javascript?

2 个答案:

答案 0 :(得分:1)

您是否正在使用集成FB JS的异步方式,例如

<div id="fb-root"></div>
<script type="text/javascript" charset="utf-8">

        window.fbAsyncInit = function() {
            resizeFacebookCanvas();
        }   
        function resizeFacebookCanvas(){
            if ( FB && FB.Canvas && FB.Canvas.setSize ){
                FB.Canvas.setSize({ 
                    width: 520, 
                    height: 900
                });
            }               
        }   

        (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>

答案 1 :(得分:1)

只是为了让你知道,这似乎是一个“已知”的Facebook / Opera漏洞。您也可以在此处关注进度:developers.facebook.com/bugs