Приложение Facebook iFrame - избавление от вертикальных полос прокрутки? - PullRequest
2 голосов
/ 08 мая 2011

Я преобразовал приложение Facebook из FBML в iFrame (с PHP SDK), и теперь у меня отображаются вертикальные полосы прокрутки для того же объема контента, который у меня был до этого (логотип, флэш-игра и строка с 3 ссылками ниже). Но раньше у меня не было полос прокрутки.

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

Я искал вокруг, и все предлагаемые решения включают Javascript, но на самом деле я использую PHP SDK. Разве нет решения только для PHP / CSS?

Ниже моего текущего кода:

<?php

require_once('facebook.php');

define('FB_API_ID', 'XXX');
define('FB_AUTH_SECRET', 'XXX');

$facebook = new Facebook(array(
            'appId'  => FB_API_ID,
            'secret' => FB_AUTH_SECRET,
            'cookie' => true,
            ));

if (! $facebook->getSession()) {
    printf('<script type="text/javascript">top.location.href="%s";</script>',
        $facebook->getLoginUrl(
                array('canvas'    => 1,
                      'fbconnect' => 0,
                      #'req_perms' => 'user_location',
        )));
    exit();
} else {
    try {
        $me = $facebook->api('/me');

        $first_name = $me['first_name'];
        $city       = $me['location']['name'];
        $female     = ($me['gender'] == 'male' ? 0 : 1);
        $avatar     = 'http://graph.facebook.com/' . $me['id'] . '/picture?type=large';

    } catch (FacebookApiException $e) {
        exit('Facebook error: ' . $e);
    }
}

# print the logo, the flash game and 3 links

?>

Также я не уверен, должен ли мой PHP-скрипт печатать

<html>
<body> 
.....
</body>
</html>

? В настоящее время я печатаю только то, что находится внутри тела.

И мне интересно, стоит ли заменить в моем коде top.location.href = .... заголовком PHP ('Location: ....');

Ответы [ 4 ]

2 голосов
/ 09 мая 2011

Если вы собираетесь использовать асинхронный метод, рекомендуется поместить в него как можно больше кода FB. Должно работать что-то вроде ниже:

<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
    FB.Canvas.setSize();
};

function sizeChangeCallback() {
    FB.Canvas.setSize();
}
(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>
</body>
</html>

Теперь вы будете вызывать функцию sizeChangeCallback() всякий раз, когда вносите изменения в макет (щелчок по новой вкладке, загрузка содержимого Ajax и т. Д.).

0 голосов
/ 22 июля 2014

Мое Раствор работает каждый раз!Сделайте так, чтобы ваше тело было переполнено, а затем добавьте это.

<div id="fb-root" class="fb_reset"><script async="" src="https://connect.facebook.net/en_US/all.js"></script></div>
   <script type="text/javascript">
       window.fbAsyncInit = function() {
           FB.init({appId: '293887700673244', status: true, cookie: true, xfbml: true, oauth: true});
           window.setTimeout(function() {
               FB.Canvas.setAutoGrow(); }, 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>
0 голосов
/ 05 августа 2012

Я только что собрал довольно обширное руководство в своем блоге, также с использованием PHP-SDK.Помимо избавления от этих полос прокрутки, я также покажу, как создать Fan-Gate и простую кнопку Share.Я надеюсь, что смогу помочь некоторым из вас, ребята, с этим:

http://net -bites.de / facebook / tutorial-how-to-create-facebook-iframe-pages-for-timeline-width-810px-с-веером затвор и доля кнопка /

0 голосов
/ 09 мая 2011

Хорошо, я нашел решение :

<html>
<head>
<script type="text/javascript">
window.fbAsyncInit = function() {
        FB.Canvas.setSize();
}

function sizeChangeCallback() {
        FB.Canvas.setSize();
}
</script>
</head>
<body>
......

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
        appId  : '<?php print(FB_API_ID); ?>',
        status : true,
        cookie : true,
        xfbml  : true
});
</script>
</body>
</html>

и установите Размер IFrame на Автоматическое изменение размера на вкладке настроек.

И заголовок ('Location:'. $ Url); не будет работать по любой причине.

...