Anomalie #3025
accès à une iframe en javascript : limitation de firefox
Description
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 :
getProtocol: function(v_url)
{
var matches = v_url.match(/^https?/i);
return matches ? matches[0] : "";
}
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)
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
}
Demandes liées
Révisions associées
No notif on purge ticket see #3025
Accès à une iframe en javascript : limitation de Firefox (fixes #3025)
Accès à une iframe en javascript : limitation de Firefox (fixes #3025)
Accès à une iframe en javascript : limitation de Firefox (fixes #3025)
Historique
#1 Mis à jour par Christophe Deseure il y a environ 12 ans
- Description mis à jour (diff)
#2 Mis à jour par Lionel Morin il y a environ 12 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit e6c28fb958424cd1a1fbbb5654705a002ade4b9f.
#3 Mis à jour par Lionel Morin il y a environ 12 ans
- Assigné à mis à Lionel Morin
#4 Mis à jour par Lionel Morin il y a environ 12 ans
Appliqué par commit commit:ba984207c271689dcda90cb5d2a802c652b07591.
#5 Mis à jour par Lionel Morin il y a environ 12 ans
Appliqué par commit cfe541a711c10a70cb8685dd3e4f99f8026bf414.
#6 Mis à jour par Gérald Schwartzmann il y a environ 12 ans
- Statut changé de Résolu à Fermé