IE7 - setAutoGrow не работает

Я создал приложение facebook, которое я использую внутри вкладки iFrame.

Я использую функцию setAutoGrow для Javascript SDK, чтобы iFrame расширялся до конца содержимого.

Из моих наблюдений функция setAutoGrow не работает в IE7, и я не могу понять, почему. Все остальные браузеры (включая IE8 и 9) работают правильно.

Для целей тестирования я создал градиент высотой 1500 пикселей.

Example gradient for testing purposed of 1500px height

В качестве примера я опубликую, как он выглядит в Chrome. Как вы можете видеть, градиент можно прокручивать до конца (красный цвет):

Gradient inside iFrame tab works as expected in normal browsers

И вот что происходит в IE7. Высота iFrame составляет 800 пикселей (как определено в настройках приложения). Вы можете видеть, что он останавливается на "бирюзовый", а функция setAutoGrow не расширяет его до желаемой высоты (1500 пикселей).

Gradient inside iFrame tab doesnt expand in IE7

Важная часть моего CSS выглядит следующим образом:

body, html { 
    overflow: hidden;        
    margin: 0; padding: 0;
}

    #wrapper {
        margin: 0 auto;
        width: 810px;    
    }

        #content {
          background: url(../img/bg.jpg) top left no-repeat;
          height: 1500px;
        }

И это фрагмент javascript, который я разместил непосредственно перед закрывающим тегом body и после тега fb-root:

window.fbAsyncInit = function() {

    FB.init({

        appId      : '...',
        channelUrl : '...',
        status     : true,
        cookie     : true,
        xfbml      : true

    });

    FB.Canvas.setAutoGrow();

};

Я нашел отчет об ошибке, который относится к 1 августа, который был закрыт FB: https://developers.facebook.com/bugs/209607222498543?browse=search_5009002cb69058a73627413

Я прочитал и применил подсказки из следующего раздела: Facebook iframe FB.Canvas.setAutoGrow не растет автоматически после начальной загрузки?

... но ничто, кажется, не решает проблему.

Есть ли у кого-то очевидный намек, что-то, над чем я наблюдал, или простое решение/обходное решение для этой проблемы?

Пока я использовал IE7 DebugBar, я заметил, что у него возникла проблема с загрузкой URL-адреса с именем "dimension_context.php". Я приложу скриншот.

IE7 DebugBar loading problem

Ответ 1

Я использую это, возможно, это поможет вам

<html>
<body>
    <div id="fb-root">
    </div>
    <script type="text/javascript" language="javascript" src="http://connect.facebook.net/en_US/all.js"></script>
    <script type="text/javascript" language="javascript">
        FB.init({
            appId: 'APPID',
            status: true, // check login status
            cookie: true, // enable cookies to allow the server to access the session
            xfbml: true// parse XFBML
        });
        window.fbAsyncInit = function () {
            FB.Canvas.setSize();
        }
        //  FB.Canvas.setAutoResize();
        FB.Canvas.setAutoGrow(7);
    </script>
<form></form>

</body>
</html>

Ответ 2

Вы можете увидеть здесь, что моя вкладка работает над IE7:

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" 
type="text/javascript"></script>
</head>
<body style="overflow:hidden">
<div id="fb-root"></div>
<!-- YOUR HTML -->
<script type="text/javascript">
window.fbAsyncInit = function () {
        FB.init({
            appId: 0000000000000, // App ID

            status: true, // check login status
            cookie: true, // enable cookies to allow the server to access the session
            oauth: true, // enable OAuth 2.0
            xfbml: true  // parse XFBML
        });

        FB.Canvas.setAutoGrow();
        FB.Canvas.setSize({ width: 810, height: 1417 });

    };



    // Load the SDK Asynchronously
    (function (d) {
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    } (document));
</script>
</body>
</html>

Настройки моего приложения:

Ширина страницы: 810px
Ширина холста: Исправлено
Высота холста: Исправлено на 1147px

Если вы хотите, чтобы ваша вкладка адаптировалась к разным высотам, попробуйте это на каждой странице:

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" 
type="text/javascript"></script>
</head>
<body style="overflow:hidden">
<div id="fb-root"></div>
<!-- YOUR HTML -->
<script type="text/javascript">
$(document).ready(function(){
    window.fbAsyncInit = function () {
        FB.init({
            appId: 0000000000000, // App ID

            status: true, // check login status
            cookie: true, // enable cookies to allow the server to access the session
            oauth: true, // enable OAuth 2.0
            xfbml: true  // parse XFBML
        });

        FB.Canvas.setAutoGrow();
        FB.Canvas.setSize({ width: 810, height: $(document).height()});

    };



    // Load the SDK Asynchronously
    (function (d) {
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    } (document));

});
</script>
</body>
</html>

Посмотрите пример:

https://www.facebook.com/pages/Vpascoal/215529398504982?sk=app_105369212942645 (щелкните по изображению)

Ответ 3

Вы пытались перехватить кеш all.js, добавив к нему случайный параметр GET? Кроме того, я бы переписал http://part to//, чтобы файл javascript правильно загружался в случае, если facebook находится в режиме https.

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