Facebook IFrame с автоматическим изменением размера, включая полосы прокрутки - PullRequest
0 голосов
/ 21 апреля 2011

Я пытался исправить это некоторое время, но мне не повезло.У меня есть приложение на Facebook (witdh: 510), в котором есть полосы прокрутки.Вот как это выглядит в фейсбуке: Facebook App with white scroll bars

В моем приложении нет ничего, что будет иметь ширину больше 510, поэтому я не понимаю, почему в первую очередь есть пробелы.Я также не понимаю, почему существует вертикальная полоса прокрутки, потому что на странице достаточно места, чтобы поместиться в приложении.

В моих настройках приложения вызывается автоматическое изменение размера, и у меня FB.Canvas.setAutoResize(); в моем window.fbAsyncInit функция.Я также пытался использовать CSS Reset <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssreset/reset-min.css">, но это не помогло решить проблему.

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 22 апреля 2011

Сначала я бы проверил свой HTML-код iframe с помощью чего-то вроде «firebug», вы проверите все свои div-ы и проверьте вкладку «layout» слева от firebug ... вы увидите размер элемента, границы и отступаи так, проверьте, все ли правильно.

Теперь, что иногда случается со мной, так это то, что «автоматическое изменение размера» из Facebook не работает корректно в некоторых браузерах, поэтому неправильно высчитывает высоту, и у вас все еще есть полоса прокруткис правой стороны, поэтому из-за этой полосы прокрутки ваш контент становится слишком большим, и вы также получаете горизонтальную полосу прокрутки.

Мое решение для этого состояло в том, чтобы указать высоту iframe самостоятельно, а не использовать материал авторазмера,Вот код для этого (поместите в конце вашей страницы перед закрытием </body>):

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {

    FB.init({appId: '{{fbapp_id}}', status: true, cookie: true,xfbml: true});

    window.setTimeout(function() {
        FB.Canvas.setSize({height:900});
    }, 250);

  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

Здесь я выбрал высоту "900", но вы должны установить собственную высоту (высота содержимого iframe + некоторый запас безопасности, например, 50 пикселей или около того)

Также вам нужно заменить {{fbapp_id}} на свой реальный FacebookID приложения.

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2011

сначала удалите отступы и поля из тела через css

body {
 padding:0;
 margin:0;
}

ваш контент в div, который устанавливает ширину 520 (если вы все еще получаете полосы прокрутки, переполнение: скрыто). быть осторожным с отступами и границами этого DIV (см. http://www.w3.org/TR/CSS2/box.html для деталей)

когда у вас очень длинный контент, это также помогает установить минимальную высоту для этого div. иногда вы получаете вертикальные полосы прокрутки, которые, в свою очередь, ведут к горизонтальной полосе прокрутки.

в конце вашей страницы, прямо перед закрывающим телом установите

FB.Canvas.setSize()

также убедитесь, что в настройках вашего приложения вместо полос прокрутки есть «автоматическая высота» (или как она называется).

0 голосов
/ 21 апреля 2011

Если вы уверены, что размеры вашего iFrame будут всегда отображать содержимое, тогда вы можете просто установить:

<iframe src="yourpage.htm" scrolling="no"></iframe>

scrolling = "no" заставит iFrameНЕ показывать полосы прокрутки, даже если контент больше, чем фрейм.

Это должен быть верный способ НЕ показывать полосы прокрутки, но его следует использовать осторожно, и вы должны знать, что контент может оказаться скрытым без видимогопользователь может перейти к нему, если он выходит за пределы iFrame.

- edit -

Поскольку вы, очевидно, не можете установить это на Facebook, вам следует простооберните страницу, которую вы загружаете, в div обертки и задайте там свойства высоты, ширины и переполнения.

<div class="wrap" style="height:500px;  width:510px;  overflow:hidden;">
  your page content here
</div>

Вы можете использовать overflow: hidden; без полос прокрутки или overflow-x: скрытый; для скрытия только горизонтальной полосы прокрутки или overflow-y: скрытый; для скрытия только вертикальной полосы прокрутки.

...