11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous.

Voila mon problème.

J'ai une page html qui fait appel a un fichier objetsx.js dans lequel est définie une fonction Kg.
Je ne veux pas toucher à cette fonction mais je souhaite la redéfinir.

Pour ca j'ai utilisé le code suivant dans ma page html:

   if (Kg != null) {
       Kg = parent.Kg; // <== Ici parent.Kg est différent de Kg
   }


Un alert bien placé une fois que la page est chargée me montre bien que le contenu de cette fonction a été changé dynamiquement.
Problème, à l'exécution j'ai un message d'erreur sous FF qui me montre que c'est toujours la fonction Kg définie dans objetsx.js qui est appelée.

Je suis perdu et je tourne en rond, je ne sais plus quoi faire pour corriger le tir.
Modifié par K4sh (03 Sep 2007 - 14:49)
Là je pense qu'il va falloir donner un peu plus de code, ou mieux, l'URL de la page directement.
Avec ce que tu as mis là, c'est difficile de se prononcer.
Tu mentionnes firefox mais tu sous-entends que ça fonctionne avec un autre navigateur, ou c'est le contraire ?
Quel comportement essaie-tu d'obtenir ? Tu veux appler ta nouvelle fonction ou bien l'ancienne ?
Pourquoi veux-tu conserver l'ancienne ? Tu veux pouvoir l'appeler dans certains cas ?
Enfin bref, des questions où les réponses ne semblent pas tout à fait claires.

Une petite piste cependant, essaie de voir si window['Kg'] == Kg ou pas, et d'où vient cette variable parent, ça pourrait déjà expliquer certaines choses.

function ResizeIframe(){ // Redimensionne le tableau des informations lorsqu'il 
                         // est écrasé par le redimensionnement de la fenêtre
    if (IFR.resizeIfr!=null) {
        if (parent.prog.split("|")[0] == 'abs') { 
            // Redéfinir dynamiquement la fonction resizeIfr dans l'onglet 
            // des absences qui diffère d'origine des autres onglet.
            IFR.resizeIfr = function resizeIfr(v){
                var Iframe = (top.nav=="M")?frames['iFrame'].document:document.getElementById("iFrame").contentDocument; 
                Iframe.f.tifr.value = v;
                var tp = Iframe.getElementById(tabprinc);
                var dp = Iframe.getElementById(tabligne);
                tp.style.height = v;
                if (v>=44) dp.style.height = parseInt(tp.style.height) - 44;
            }
        }
                
        var Tab = (top.nav=="M")?frames['iFrame'].document.getElementById("LIGTAB"):document.getElementById("iFrame").contentDocument.getElementById("LIGTAB");
        if (Tab != null) {
            if ((Tab.getElementsByTagName('TR').length*23 + 30) == 30) {
                document.getElementById('iFrame').setAttribute('height',140); // Redimension de l'iFrame
                IFR.resizeIfr(100);                                           // Redimension du tableau minimale
            }
            else {
                document.getElementById('iFrame').setAttribute('height',500); // Redimension de l'iFrame
                IFR.resizeIfr(Tab.getElementsByTagName('TR').length*20 + 48); // Redimension du tableau en fonction du nombre de lignes
            }
        }
    }
}
...
...
...

function  initFrame() {
    if (IFR.Kg != null && Kg !=null && IFR.Kg != Kg) {
        IFR.Kg = function Kg (e) {
            alert('Affichage test'); <== pour débuggage
        }
    }
    ResizeIframe();

}
...
...
// C'est dans cette iframe que je souhaite redéfinir une fonction
<iframe id="iFrame" name="IFR" BORDER="0" FRAMEBORDER="no" width="752px" height="'+hgt+'px" SCROLLING="auto" src="/tps/blank.html" onLoad="Gestionaffzone();initFrame();"></iframe>



Je sais que la fonction Kg, contenue dans objetsx.js de la page appelée dans mon iframe, comporte un bug
mais je ne peux pas la modifier (objetsx.js est utilisé de toute part).
En redéfinissant la fonction je pourrais corriger le bug mais en dynamique et utiliser cette nouvelle fonction.
Le plus fort dans l'histoire c'est que je redéfinis une autre fonction

IFR.resizeIfr = function resizeIfr(v){

                var Iframe = (top.nav=="M")?frames['iFrame'].document:document.getElementById("iFrame").contentDocument; 

                Iframe.f.tifr.value = v;
...
...

Et ca marche très bien dans ce cas la.
La seule différence que je vois ici c'est que la fonction Kg appelée dans l'iframe est contenue dans objetsx.js alors que
la fonction resizeIfr elle est directement dans la page html appelée par l'iframe.

Je mentionnes FF parce que c'est avec lui que je débug.

PS : oublie parent.