Объект javascript FB не готов, когда я вызываю FB.Canvas.setSize в Opera

В моем приложении FB я вызываю FB.Canvas.setSize(); чтобы соответствовать странице по длине моего контента. Это работает по назначению в Chrome, Firefox, Safari и IE. Однако может показаться, что Opera вызывает его раньше, чем остальные браузеры, и пытается изменить размер до того, как объект FB будет готов принять такой запрос. Он не генерирует исключение JS, поэтому объект FB не равен нулю, но не может изменить размер страницы. Если я поставлю точку останова до вызова изменения размера и подожду пару секунд, а затем позволю ей пройти, она ИЗМЕНИТ размер страницы. Также работают другие функции FB (запросы, фид-посты и т.д.). Есть ли какие-либо известные проблемы с Opera и Facebook JS SDK или какие-либо соображения, которые я должен учитывать в отношении того, как Opera выполняет Javascript?


person keybored    schedule 29.02.2012    source источник
comment
Какую версию Opera вы тестируете?   -  person kirilloid    schedule 29.02.2012
comment
Вы вызываете setSize() без параметров? Возможно, объект FB готов, но страница не полностью отрисована, поэтому размер определяется неправильно. Попробуйте указать буквальную высоту/ширину и посмотрите, заставит ли это работать.   -  person Floyd Wilburn    schedule 01.03.2012


Ответы (2)


Просто чтобы вы знали, это похоже на «известную» ошибку Facebook/Opera. Вы также можете следить за прогрессом здесь: developers.facebook.com/bugs

person Espen Larød    schedule 02.03.2012

Используете ли вы асинхронный способ интеграции FB JS, например.

<div id="fb-root"></div>
<script type="text/javascript" charset="utf-8">

        window.fbAsyncInit = function() {
            resizeFacebookCanvas();
        }   
        function resizeFacebookCanvas(){
            if ( FB && FB.Canvas && FB.Canvas.setSize ){
                FB.Canvas.setSize({ 
                    width: 520, 
                    height: 900
                });
            }               
        }   

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

</script>
person scibuff    schedule 01.03.2012
comment
Я на самом деле нет, это повлияет на это? Или это скорее, попробуйте, и мы узнаем? хе - person keybored; 02.03.2012