如何在Firefox上从画布中删除滚动条

时间:2011-10-31 11:04:01

标签: facebook firefox canvas scrollbars

Firefox正在向画布添加滚动条,即使将body设置为overflow:hidden并执行FB.Canvas.setAutoResize();.每个其他浏览器都会隐藏滚动条。当我从页面中删除所有内容时,滚动条仍然存在。

示例:https://apps.facebook.com/fbtestapppb/

5 个答案:

答案 0 :(得分:4)

随着Facebook时间轴的推出,删除滚动条和控制页面边距的方式已经改变。首先(最重要的是)你的身体填充和边距必须都设置为零。这可确保所有浏览器处理绝对零度的画布设置。

取决于“页面标签宽度”'您在应用/页面设置中设置的(520px或810px)选项,您需要在以下代码中调整宽度。该块应放在Head:

页面中
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.Canvas.setSize();
}
// Do things that will sometimes call sizeChangeCallback()
function sizeChangeCallback() {
FB.Canvas.setSize();
}
</script>

在Body标签下方添加以下代码:

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({appId: 'YOUR APP ID', status: true, cookie: true, xfbml: true});
window.fbAsyncInit = function() {
  FB.Canvas.setSize({ width: 520, height: 1000 });
}
</script>

请务必更改您的APP ID&#39;。宽度:应等于520或810.设置高度:略大于允许溢出所需的值。

此解决方案已在IE,FF,Safari和Chrome中测试过!

答案 1 :(得分:1)

我将此添加到我的CSS中,似乎有效:

body {
    margin-top: -20px;
    padding-top: 20px;
}

如果你已经在身体顶部添加了填充物,则可能需要添加20px。

我认为这是因为firefox以不同于其他浏览器的方式测量身高。

在ff8,chrome16和ie9中测试,没有任何负面影响。

答案 2 :(得分:1)

我用这种方式解决了这个问题:

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

  window.fbAsyncInit = function() {
        FB.init({
          appId      : app_id, // App ID
          status     : true, // check login status
          cookie     : true, // enable cookies to allow the server to access the session
          xfbml      : true  // parse XFBML
        });         

       var height_doc = $(document).height()+20; 
       FB.Canvas.setSize({height: height_doc});
  };

这对我有用。我希望能有所帮助。

答案 3 :(得分:0)

这是画布应用和页面标签的一个已知问题,并且已经烦恼地存在了很长一段时间。

https://developers.facebook.com/bugs/309917422436936

有些人提到能够使用FB.Canvas.setSize({ width: 700, height: 800 });或类似FB.Canvas.setAutoResize(500);之类的内容,而且可以解决问题。

您是否确实在应用控制面板中设置了iframe自动调整大小选项?

答案 4 :(得分:0)

忘记身体和html边距(我的意思是将它们设置为零) 只需将所有内容(包括页眉和页脚)放入带有单个单元格的表格中即可 至少所有浏览器都会同意如何计算表格的高度......

像这样:

 <table id='m_table' width=100% align=left border=0 cellspacing=0 cellpadding=0>
    <tr><td valign=top bgcolor=white align=center style='position:relative;'>

并执行此操作:

setTimeout(function() {FB.Canvas.setSize({height:(document.getElementById('m_table').offsetHeight+40)})}, 1000);

适用于IE,FireFox和Chrome / Safari ......

如果需要,可以使用FB初始化代码:

window.fbAsyncInit = function() {
      FB.init({appId:'your_app_id',status:true,cookie:true,xfbml:true});fbApiInit = true;
      }

 function fbEnsureInit(callback)
  {
    if(!window.fbApiInit) setTimeout(function() {fbEnsureInit(callback);}, 50);
        else if(callback) callback();
  }
 fbEnsureInit(function() {
    FB.Canvas.scrollTo(0,0);
    var h = document.getElementById('m_table').offsetHeight+40;
   // console.log('setting size to '+h);
    FB.Canvas.setSize({height:h});
     setTimeout(function() {FB.Canvas.setSize({height:(document.getElementById('m_table').offsetHeight+40)})}, 1000);
  });