JavaScript - как использовать высоту FB.Canvas.getPageInfo вне функции обратного вызова - PullRequest
1 голос
/ 11 февраля 2012

Я пытаюсь реализовать средство просмотра Scribd на холсте приложения Facebook и позволить ему адаптироваться к высоте окна просмотра пользователя.
Мой код вызывает функцию FB.init как самый первый элемент тела

<div id="fb-root"></div>
  <script>

    window.fbAsyncInit = function() {
      FB.init({
        appId      : 'my-fb-app-id',
        status     : true, 
        cookie     : true,
        xfbml      : true,
        oauth      : true,
      });

      FB.Canvas.getPageInfo(function(info){
           var viewportHeight = info.clientHeight - info.scrollTop - info.offsetTop;
           FB.Canvas.setSize ({height: viewportHeight});
      });
    };
    (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/it_IT/all.js";
       d.getElementsByTagName('head')[0].appendChild(js);
     }(document));

  </script>

Таким образом я настраиваю высоту iFrame. Теперь я должен использовать переменную viewportHeight вне функции обратного вызова, чтобы отрегулировать высоту читателя scribd. Код читателя Scrbid:

 <script type='text/javascript' src='http://www.scribd.com/javascripts/scribd_api.js'></script>

<div id='embedded_doc'><a href='http://www.scribd.com'>Scribd</a></div>

<script type='text/javascript'>
    var scribd_doc = scribd.Document.getDoc(<? echo $doc_id; ?>, '<? echo $access_key; ?>' );

    var onDocReady = function(e){
    //scribd_doc.api.setPage(3);
    }

    scribd_doc.addParam( 'jsapi_version', 2 );
    scribd_doc.addEventListener( 'docReady', onDocReady );
    scribd_doc.addParam('height', viewportHeight );";

    scribd_doc.write( 'embedded_doc' );
    </script>

Но кажется, что переменные внутри функции обратного вызова FB.canvas.getInfo () не могут быть видны снаружи. Уже пытались с cookie, но я выяснил, что браузеры не позволяют хранить куки из iFrame.

Как бы я решил (если возможно)?

1 Ответ

0 голосов
/ 11 февраля 2012
window.fbAsyncInit = function() {
  FB.init({
    appId      : 'my-fb-app-id',
    status     : true, 
    cookie     : true,
    xfbml      : true,
    oauth      : true,
  });

  FB.Canvas.getPageInfo(function(info){
       var viewportHeight = info.clientHeight - info.scrollTop - info.offsetTop;
       FB.Canvas.setSize ({height: viewportHeight});
       prepScribdDoc(viewportHeight);            
  });
};
var onDocReady = function(e){
    //scribd_doc.api.setPage(3);
    alert('Red eye');
}

var prepScribdDoc = function(viewportHeight) {
    var scribd_doc = scribd.Document.getDoc(<? echo $doc_id; ?>, '<? echo $access_key; ?>' );
    scribd_doc.addParam( 'jsapi_version', 2 );
    scribd_doc.addEventListener( 'docReady', onDocReady );
    scribd_doc.addParam('height', viewportHeight );";

    scribd_doc.write( 'embedded_doc' );
}
...