Le code est le suivant :
var drapeau = vrai;
var frameDom = $('iframe:eq(0)')[0];
$('bouton').on('clic',fonction(){
si (drapeau) {
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Essayez{
frameWin.document.write('');
frameWin.document.clear();
}attraper(e){};
*/
frameDom.src = 'b.html';
drapeau = faux ;
}autre{
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Essayez{
frameWin.document.write('');
frameWin.document.clear();
}attraper(e){};
*/
frameDom.src = 'a.html';
drapeau = vrai ;
>
//$('#console').append(flag ? 'Passer à a.html': 'Passer à b.html');
});
Test à l'aide du tamis : les #fuites augmentent d'environ 28 à chaque changement.
Méthode d'écriture 2 : Méthode d'écriture en ligne
<script><br>
var drapeau = vrai;<br>
var frameDom = $('iframe:eq(0)')[0];<br>
$('bouton').on('clic',fonction(){<br>
si (drapeau) {<br>
var frameDom = $('iframe:eq(0)')(0];<br>
var frameWin = frameDom.contentWindow;<br>
essayer{ <br>
frameWin.document.write(''); <br>
frameWin.document.clear(); <br>
}attraper(e){}; <br>
frameDom.src = 'b.html';<br>
drapeau = faux ;<br>
}autre{<br>
var frameDom = $('iframe:eq(0)')(0];<br>
var frameWin = frameDom.contentWindow;<br>
essayer{ <br>
frameWin.document.write(''); <br>
frameWin.document.clear(); <br>
}attraper(e){}; <br>
frameDom.src = 'a.html';<br>
drapeau = vrai ;<br>
><br>
//$('#console').append(flag ? 'Passer à a.html': 'Passer à b.html');<br>
});<br>
</script>
Test à l'aide du tamis : les #fuites augmentent d'environ 28 à chaque changement. Il n'y a aucune différence avec la manière d'écrire
Troisième méthode d'écriture :
var drapeau = vrai;
var frameDom = $('iframe:eq(0)')[0];
$('bouton').on('clic',fonction(){
si (drapeau) {
/*
Essayez{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}attraper(e){};
*/
$('iframe:eq(0)').remove();
$('body').append("");
drapeau = faux ;
}autre{
/*
Essayez{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}attraper(e){};
*/
$('iframe:eq(0)').remove();
$('body').append("");
drapeau = vrai ;
>
});
Utilisation du test sIEve : la #fuite moyenne est de 3, ce qui est une énorme différence par rapport aux deux premières
Méthode d'écriture 4 : Notez qu'un morceau de code est commenté dans la méthode 3. Que se passera-t-il si vous supprimez le commentaire ?
var drapeau = vrai;
var frameDom = $('iframe:eq(0)')[0];
$('bouton').on('clic',fonction(){
si (drapeau) {
Essayez{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}attraper(e){};
$('iframe:eq(0)').remove();
$('body').append("");
drapeau = faux ;
}autre{
Essayez{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}attraper(e){};
$('iframe:eq(0)').remove();
$('body').append("");
drapeau = vrai ;
>
});
Il n'y a pas de différence évidente entre cette méthode d'écriture et la méthode d'écriture 3. Les #fuites augmentent quand même d'environ 3 à chaque fois que vous la changez
On peut donc conclure que la meilleure façon de résoudre la fuite de mémoire liée à la réinitialisation de l'adresse iframe est de la tuer et d'en ajouter une autre !
La transmission en ligne peut ne pas être fiable
Remarque : L'environnement de test local est WIN7 x64 IE9