Redimensionado automatico del iframe de una pagina canvas
Uno de los problemas habituales con los que nos encontramos al crear nuestra primera aplicación en Facebook es como lograr que el iframe de la pagina canvas que carga la aplicación en Facebook dimensione el largo de la pagina al tamaño que deseamos.
A la hora de crear una aplicación en Facebook en el apartado “On Facebook->Canvas Settings”, tenemos una opción que nos indica “Iframe Size”, y nos deja escoger entre “Show scrollbars” y “Auto-Resize”.
![]()
Si seleccionamos “Show scrollbars”, veremos unas barras de desplazamiento que permiten desplazarnos por nuestra aplicación, aunque deberíamos mirar de evitar usarlas. Si habéis navegado por Facebook veréis que muy pocas aplicaciones las usan.
Si seleccionamos “Auto-Resize”, nos vamos a encontrar que Facebook corta indiscriminadamente nuestra pagina y no muestra las barras laterales que antes os comentaba. Este problema tiene sencilla solución. El problema reside en que no hemos indicado en el código JavaScript de nuestra pagina que le diga a Facebook como redimensionar el Iframe.
A estas alturas doy por hecho que estais familiarizados con el código JavaScript que toda aplicación Canvas de Facebook debe tener.
<div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({ appId : '24239711937', status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true, logging: '0' }); jQuery(document).trigger('fb:init'); }; (function() { var e = document.createElement('script'); e.src = document.location.protocol + '//connect.facebook.net/es_ES/all.js'; e.async = true; document.getElementById('fb-root').appendChild(e); }()); </script>
En el caso de Drupal dicho código nos lo genera el módulo Fbconnect, lo que vamos a hacer es modificar el módulo Fbconnect para agregar un par de líneas extra al código JavaScript, para indicarle a Facebook que queremos redimensionar el Iframe, al largo de página que tengamos.
$footer['fb-init-code'] = <<<CODE <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({ appId : '$config[app_id]', status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true, logging: '$config[debug]' }); jQuery(document).trigger('fb:init'); }; (function() { var e = document.createElement('script'); e.src = $config[connect_js]; e.async = true; document.getElementById('fb-root').appendChild(e); }()); </script> CODE;
Vista previa de las lineas 420 a 444 del archivo fbconnect.module
Para ello simplemente debemos editar el archivo fbconnect.module (Lo encontrareis en /sites/all/modules/fbconnect) y debajo de la línea 432 agregar el siguiente comentario y línea de código. (Los no usuarios de Drupal, simplemente añadid las lineas 14 y 15 a vuestro código Javascript) Quedando como el siguiente ejemplo:
$footer['fb-init-code'] = <<<CODE <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({ appId : '$config[app_id]', status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true, logging: '$config[debug]' }); jQuery(document).trigger('fb:init'); //Resize the iframe when needed FB.Canvas.setAutoResize(); }; (function() { var e = document.createElement('script'); e.src = $config[connect_js]; e.async = true; document.getElementById('fb-root').appendChild(e); }()); </script> CODE;
Fijaos en las lineas 14 y 15 donde comentamos y creamos la instrucción para redimensionar el iframe.
Ya solo nos hara falta seleccionar “Auto-Resize” en las propiedades de la aplicación de Facebook y veremos como se redimensiona correctamente el iframe de nuestra aplicación.

