2011-01-28 4 views
0

Amisfermeture des fenêtres enfant

Dans notre application, nous avons une fenêtre parente A, puis il y a la fenêtre B qui fraye par la fenêtre A, puis la fenêtre C fraie par la fenêtre B, puis plusieurs autres fenêtres fraye sur de la fenêtre C Lorsque je me déconnecte de la fenêtre A, seule la fenêtre B se ferme, elle ne ferme PAS la fenêtre C et ses enfants

Le script actuellement utilisé est le suivant.

function Close(frm) { 
    var win; 
    if(window.opener) 
    { 
    win = window 
    }else if(window.parent.WinObjectArray) 
    { 
    win = window 
    } 
    else 
    { 
    win = window.parent; 
    } 
    if(!win.parent.WinObjectArray) 
    win = win.parent; 

    if(frm=='logout') 

    { 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
     for(i=win.parent.WinObjectArray.length-1;i>=0;i--) 

      { 
       if(!win.parent.WinObjectArray[i].closed) 
       win.parent.WinObjectArray[i].close(); 
      } 
      return ; 
    } 
    } 
    var closeWinArray = new Array(); 
    closeWinArray[0] = window; 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
     for(i=0;i<win.parent.WinObjectArray.length;i++) 
     { 
      var openerFnd = false; 
      for(j=0;j<closeWinArray.length;j++) 
       { 
       if(!win.parent.WinObjectArray[i].closed && win.parent.WinObjectArray[i].opener == closeWinArray[j]) 
       { 
       closeWinArray[closeWinArray.length] = win.parent.WinObjectArray[i]; 
       openerFnd = true; 
       } 
       else if(win.parent.WinObjectArray[i].closed) 
        { 
        openerFnd = true; 
        } 
       } 
    if(openerFnd){ 
    win.parent.WinObjectArray.splice(i,1); 
    i=i-1; 
    } 
    } 
    } 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
    for(i=0;i<win.parent.WinObjectArray.length;i++) 
    { 
    if(win.parent.WinObjectArray[i] == window) 
    { 
    win.parent.WinObjectArray.splice(i,1); 
    break; 
    } 
    } 
    closeWinArray.splice(0,1); 
    for(i=closeWinArray.length-1;i>=0;i--) 
    { 
    if(!closeWinArray[i].closed) 
    closeWinArray[i].close(); 
    } 
    } 
     for (i=0;i<WindowArray.length;i++){ 
     if (! WindowArray[i].closed) { 
     WindowArray[i].close(); 
     } 
    } 
} 
+0

Veuillez exécuter votre code via jsbeautifier.org - votre indentation est horrible .. – ThiefMaster

Répondre

2

Il suffit que la fenêtre A devienne la liaison pour toutes vos fenêtres. Il est facile d'appeler le parent pour écrire une nouvelle fenêtre pour les processus/fenêtres enfants. Donc, si vous acheminez toutes vos fonctions de fenêtre vers et depuis le parent, vous n'aurez plus ce problème. Le parent [A] aura la permission et le contrôle total de toutes les fenêtres enfants dans cette configuration.

+0

+1 car c'est la solution la plus extensible et il ne vous oblige pas à ajouter des événements onclose à toutes les fenêtres enfants - ils ne sont même pas doivent savoir qu'ils sont des fenêtres d'enfants, ce qui est génial. – Fenton

+0

Plz vérifier le code que j'ai mis – ronan

+0

La seule façon que je peux déboguer votre code est si je laisse voir le document dans son formatage web natif. Le frontal complet, ce qui est facile si vous postez simplement un lien vers celui-ci. Je vais le parcourir et voir que je peux vous aider à trouver une solution. – DoctorLouie

0

Je pense que la fenêtre A n'a pas la permission de Clode fenêtre C et l'enfant de Windows de C.

Effectuez les opérations suivantes: Créer un Javascript pour l'événement onClose(). Attachez ceci à la fenêtre B. Dans cette méthode fermez les enfants de B. Les enfants de B shoud ont le même type d'écouteur onUnload() ou onClose() et ferment les fenêtres créées par eux.

Questions connexes