谷歌Chrome / Windows / FB.Canvas.setAutoGrow问题

时间:2012-04-02 10:16:12

标签: javascript css windows facebook google-chrome

这个问题很明显。

https://www.facebook.com/TabascoUK/app_202624839826809

在Windows XP上使用Google Chrome,FB.Canvas.setAutoGrow错误地将帧大小误算两个像素。我会将其报告为一个错误,但(1)我没有设法在所有计算机上重现相同的行为,即使它们具有相同的设置。 (2)我查看了all.js,它看起来很好 - 没有明显的错误原因。

我已尝试重置缓存,更新浏览器等。但仍然存在2px错误。

可能导致什么?

3 个答案:

答案 0 :(得分:1)

自发布以来,我没有遇到任何问题。但由于Chuck Morris似乎遇到了同样的问题,我将分享我的经验。

首先,我错误地认为可以在代码中随时调用FB.Canvas.setAutoGrow。它是有道理的,因为它然后启动间隔,它应检测任何DOM更改。嗯,事实并非如此。

无论如何,诀窍是在加载DOM后加载Facebook JS。根据我的经验,这有助于解决所有故障。如果您使用的是jQuery,那么这样就可以了。

$(function(){
    window.fbAsyncInit  = function()
    {
        FB.init({/*[..]*/});

        FB.Canvas.setAutoGrow(91);
        FB.Canvas.scrollTo(0,0);
    };

    // Load the SDK Asynchronously
    (function(d){
        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.js";
        ref.parentNode.insertBefore(js, ref);
    }(document));
});

答案 1 :(得分:0)

盖,

我真的很感谢你跟进这一点,我真的希望你的方式能够在我的设置中运行,因为它比我的黑客修复要清晰得多,但它仍然错误地计算iframe的2像素。无论如何,如果有人碰到这个,这就是我所做的。

window.fbAsyncInit = function() {
    FB.init({/*[..]*/});


    // Additional initialization code here
    FB.Canvas.setAutoGrow(91);
    FB.Canvas.scrollTo(0,0); 

    //FB.Canvas.setAutoGrow is miscalculating the height by 2 pixels in webkit browsers
    //so we shorten the content by 2 pixels right away, and a second later if things were a little too slow
    window.setTimeout(function() {
        $("#footer").css("height", "74px");
    }, 250);
    window.setTimeout(function() {
        $("#footer").css("height", "72px");
    }, 1000); 
  };

答案 2 :(得分:0)

我有同样的问题,我发现我已被添加

<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>

但是在Chrome中你必须通过以下方式添加

<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>

不同的协议在Chrome中不起作用总是使用 https

或最好的方式可能是

 <script type="text/javascript" src="//connect.facebook.net/en_US/all.js"></script>