Projet

Général

Profil

Anomalie #3025

Mis à jour par Christophe Deseure il y a environ 12 ans

Exemple sur le plugin de charte (voir ticket lié) :

Lors de l'accès à l'onglet "Charte informatique" dans l'interface d'administration, une iframe est utilisée et la méthode "adjustFrameHeight" du fichier "ajax.js" est appelée par la fenêtre principale pour redimensionner l'iframe à la hauteur de son contenu.
On obtient alors ce message sous Firefox : "Permission refusée à <https://etab.in.academie.fr> d'obtenir la propriété Window.document de <http://etab.in.academie.fr>."
Il est dû à cette ligne javascript : "var height = v_frm.contentWindow.document.body.scrollHeight + 30;"
Il semble que ce soit une restriction forte du navigateur qui empêche la fenêtre principale de manipuler le "document" du contenu de l'iframe juste à cause de la différence de protocole.

Je propose d'ajouter une méthode "getProtocol" à l'objet "$p.url" (contenant déjà "getHost") afin d'être utilisée par "adjustFrameHeight" pour ne pas tenter de redimensionner la hauteur de l'iframe si le protocole est différent entre le parent et l'enfant sous firefox :

<pre><code class="javascript">
getProtocol: function(v_url)
{
var matches = v_url.match(/^https?/i);
return matches ? matches[0] : "";
}
</code></pre>


Le "else" de la méthode "adjustFrameHeight" deviendrait alors : (j'en ai profité pour sortir la condition existante sur firefox puisqu'elle se faisait dans les 2 cas)

<pre><code class="javascript">


if ($p.navigator.FF) v_frm.style.height = '100px'; // used on FF to force resize

// if the iframe is a not a local url, the size properties are not accessable
// exception firefox (mars 2012) : si le protocole est différent, ça bloque ("Permission refusée à <https://...> d'obtenir la propriété Window.document de <http://...>.")
if ($p.url.isLocal(v_frm.src) && (v_frm.src).indexOf('framenoresize') == -1 && (!$p.navigator.FF || ($p.url.getProtocol(window.location.href)!=$p.url.getProtocol(v_frm.src)))) {
var height = v_frm.contentWindow.document.body.scrollHeight + 30;

// if content height too small, enlarge
if (height < (pageHeightMinusHeader - 30)) height = pageHeightMinusHeader - 30;

if (v_doitagain)
setTimeout("$p.adjustFrameHeight($('" + v_frm.id + "'),false)",6000);
}
else {
var height = pageHeightMinusHeader - 15;
// l_frm.scrolling = 'auto' > do not work. With IE this property is not changeable after item creation
}
</code></pre>

Retour