Projet Socle ENT
Pages enfant
  • Retaillage d'iframe

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Mettre le fichier iframe-resize-plugins.js dans le dossier "javascript" du skin (ex : custom/uPortal/uportal-war/src/main/webapp/media/skins/universality/common/javascript/)

Bloc de code
 /*********************************************

Resize d'iframe

*********************************************/
(function($){
       $$(document).ready(function(){
       
        var
        var resizeFrames = function() {
            $            $('iframe').each(function(){            
                var            
                var height_window = $(window).height();
                
                                
                // do not open other iframe
                                // direct child of up-portlet-content-wrapper-inner
                if                if($(this).parent().get(0).className == 'up-portlet-content-wrapper-inner') {
                    newHeight                    newHeight = height_window-210;
                    this                    this.height=newHeight+"px";
                
                    $                
                    $('#portalPageFooter').hide();
                }
                            }
            });
        }
        
        $        }
        
        $(window).resize(function() {
            resizeFrames            resizeFrames();
                });

        resizeFrames        resizeFrames();
       });
})(jQuery);

Dimensionner l'iframe à la taille de son contenu

(nb : testé avec uPortal 3.2 et tous les navigateurs testés : Firefox 3.6, Chrome 8.0, Safari, IE 8). Ne fonctionne pas avec IE6/IE7 qui ne gèrent pas postMessage)

Le portail qui reçoit la hauteur Voici une solution similaire à celle de Vincent Bellenger mais plus simple : ce n'est pas le contenu de l'iframe qui modifie le height de l'iframe, c'est le portail qui reçoit les mises à jour du contenu des iframes et qui demande la taille du contenuajuste la hauteur de l'iframe.
Cette solution nécessite que l'ENT et l'application mise en iframe soient sur le même domaine et il faut modifier l'application : ajouter

Bloc de code

<script type="text/javascript"> document.domain = "univ-xxx.fr"; </script>

dans toutes les pages (header ou footer ou ...)

Cette solution fonctionne bien pour des pages simples (filex, Saisie de Notes en Ligne de l'amue...) et peut être couplée à la première solution pour les applications ne pouvant pas être modifiées avec document.domain ou posant des problèmes (par exemple fckeditor ?)

...

fonctionne avec toutes les applications testées, même celles utilisant de l'ajax pour construire la page affichée.

Cette solution nécessite que toutes les pages de l'application aient un DOCTYPE (dans le cas contraire, il est souvent possible d'en ajouter un)

Installation

Dans le portail
  • ajouter dans le fichier skin.xml

...

  • :
    Bloc de code
    
    <js>javascript/use-iframe-autoheight-

...

  • using-postMessage.js</js>
    

...

...

  • postMessage.js dans le dossier "javascript" du skin (ex : custom/uPortal/uportal-war/src/main/webapp/media/skins/universality/common/javascript/)
Bloc de code

document.domain = "univ-xxx.fr";

Mettre le fichier use-iframe-autoheight-plugins.js dans le dossier "javascript" du skin

Sur un serveur web

Installer postMessage-resize-iframe-in-parent.js pour le rendre accessible aux applications (ex : http://xxx.univ.fr/zzz/postMessage-resize-iframe-in-parent.jsImage Added).

Dans l'application

Ajouter dans les pages (dans le header ou footer ou ...) :

Bloc de code

<script src="http://xxx.univ.fr/zzz/postMessage-resize-iframe-in-parent.js" />
Bloc de code

(function($){
    $(document).ready(function(){

        var resizeFrame = function(frame) {
                var height = $(frame).contents().find("html").attr('scrollHeight');
                if (height === undefined) return;

                // for firefox, one could use $(frame).contents().find("html").height()
                // which works without needing to set height to 0 first
                $(frame).css({height: 0});

                var height = $(frame).contents().find("html").attr('scrollHeight');
                if (height > 0) {
                    var horiz_scroll_heigth = 20;
                    $(frame).css({height: height + horiz_scroll_heigth});
                }
        };

        $('iframe').load(function() {
            resizeFrame(this);
        });
    });
})(jQuery);