Tous ces problèmes ont des solutions...
Vous avez des applications en http ?
Sachez que firefox (par défaut) conserve tous les cookies non-"secure" sur le disque, même après avoir quitté.
Les principaux navigateurs refusent les "active" http dans les pages https.
⇒ Mettez un reverse proxy !
Safari a ouvert le bal en acceptant uniquement les cookies « des sites visités ». Firefox devrait bientôt faire pareil :
cookies acceptés pour le même domaine que l'url affichée dans le navigateur.
2 solutions pour application externe à l'université :
Ici le tableau force une largeur importante, explosons le :
@media screen and (max-width: 600px) {
td { display: block; }
}
onload
, l'application informe le portail de sa taille via postMessage
:
window.addEventListener("load", function() {
parent.postMessage(getDocumentHeight(), "*");
});
le portail reçoit la taille :
function receiveIframeHeight(frameWindow, height) {
$("iframe").each(function () {
if (this.contentWindow === frameWindow) this.height = height;
});
};
window.addEventListener("message", function (e) {
receiveIframeHeight(e.source, e.data);
});
Pour la fonction getDocumentHeight
, apache shindig fournit du code compliqué mais marchant bien sur tous les navigateurs.
resize
window.addEventListener("resize", function() {
parent.postMessage(getDocumentHeight(), "*");
});
resize
resize
.
⇒ variable resizedByUs pour ignorer cet évènement.
<script src="https://xxx.univ.fr/zzz/postMessage-resize-iframe-in-parent.js"></script>
Si besoin nous utilisons mod-substitute d'apache :
FilterDeclare replace
FilterProvider replace SUBSTITUTE Content-Type $text/html
FilterChain replace
Substitute "s|<body>|<body><script src=\"https://xxx.univ.fr/zzz/postMessage-resize-iframe-in-parent.js\"></script>|"
<script>
window.cssToLoadIfInsideIframe = "https://xxx.univ-paris1.fr/zzz/FNAME.css";
</script>
Cela permet de cacher le bandeau de l'application, le bouton de déconnection, de supprimer des width/padding excessif...
Cette solution est utilisée avec succès depuis 2 ans à l'université Paris 1 sur de nombreuses applications.
Problèmes avec certaines applications (nuxeo, glpi, compilatio 2013-09) :
Comment gérer les modifications qui interviennent après l'évènement onload
?
Pour les problèmes de double-ascenseur, une solution existe dans google gadgets.* API (et donc dans OpenSocial gadgets) : l'application en iframe prévient le portail via postMessage quand elle se redimensionne.
En pratique pour des applications avec peu de javascript, l'insertion d'une simple ligne <script> dans l'application suffit... sans modifier le comportement de l'application hors iframe !
Sur la liste esup-utilisateurs :