Fonction Javascript reste en mémoire dans IE
Aquel
Messages postés
200
Statut
Membre
-
Aquel Messages postés 200 Statut Membre -
Aquel Messages postés 200 Statut Membre -
Bonjour tout le monde,
Il y a un truc qui m'échappe carément là. Je ne dois pas avoir bien compris le Javascript :).
Bref, j'ai une page qui affiche une photo seulement lorsque celle-ci est redimensionnée à une taille raisonnable.
Cela ne pose aucun problème lorsque j'upload mon image la première fois. Par contre, lorsque je la remplace, ça merde.
Je m'explique : Si j'insère une photo au format paysage, celle-ci garde bien son ratio d'origine. Par contre, si je l'écrase par une autre au format portrait. Celle-ci garde exactement les même dimension que l'ancienne photo (elle est donc tout aplatie).
Ce que je ne comprend vraiment pas, c'est comment la page peut garder ces informations en mémoire alors que la fonction calcule le dimension en fonction de la nouvelle photo. L'ancienne n'existant plus du tout.
Voici ma fonction de redimensionnement ainsi que son appel dans le corps de la page.
J'ai pourtant vidé tous mes fichiers temporaires. Comment diable ce fichu IE garde-t-il les diemensions de l'ancienne photo.
Merki pour votre aide..
Il y a un truc qui m'échappe carément là. Je ne dois pas avoir bien compris le Javascript :).
Bref, j'ai une page qui affiche une photo seulement lorsque celle-ci est redimensionnée à une taille raisonnable.
Cela ne pose aucun problème lorsque j'upload mon image la première fois. Par contre, lorsque je la remplace, ça merde.
Je m'explique : Si j'insère une photo au format paysage, celle-ci garde bien son ratio d'origine. Par contre, si je l'écrase par une autre au format portrait. Celle-ci garde exactement les même dimension que l'ancienne photo (elle est donc tout aplatie).
Ce que je ne comprend vraiment pas, c'est comment la page peut garder ces informations en mémoire alors que la fonction calcule le dimension en fonction de la nouvelle photo. L'ancienne n'existant plus du tout.
Voici ma fonction de redimensionnement ainsi que son appel dans le corps de la page.
<script type="text/javascript" language="javascript">
<!--//
function redimImage(inImg, inMW, inMH, monconteneur)
{
// Cette function recoit 3 parametres
// inImg : Chemin relatif de l'image
// inMW : Largeur maximale
// inMH : Hauteur maximale
var maxWidth = inMW;
var maxHeight = inMH;
// Declarations des variables "Nouvelle Taille"
var dW = 0;
var dH = 0;
// Declaration d'un objet Image
var oImg = new Image();
// Enregistrement des varaibles sur l'image
oImg.maxWidth = inMW;
oImg.maxHeight = inMH;
oImg.conteneur = monconteneur;
oImg.onload = function(){
/* Quand on est dans une fonction évenement, du style onload, "this"
* correspond à l'objet qui possede la fonction. Dans notre cas, c'est l'image.
* De même, on est pas sûr de retrouver les variables de la fonction de départ.
*C'est pour cela que j'ai enregistré les tailles max dans l'objet l'image. */
// On recupere les tailles reelles
var h = dH = this.height;
var w = dW = this.width;
// Si la largeur ou la hauteur depasse la taille maximale
if ((h >= this.maxHeight) || (w >= this.maxWidth)) {
// Si la largeur et la hauteur depasse la taille maximale
if ((h >= this.maxHeight) && (w >= this.maxWidth)){
// On cherche la plus grande valeur
if (h > w) {
dH = this.maxHeight;
// On recalcule la taille proportionnellement
dW = parseInt((w * dH) / h, 10);
} else {
dW = this.maxWidth;
// On recalcule la taille proportionnellement
dH = parseInt((h * dW) / w, 10);
}
} else if ((h > this.maxHeight) && (w < this.maxWidth)) {
// Si la hauteur depasse la taille maximale
dH = this.maxHeight;
// On recalcule la taille proportionnellement
dW = parseInt((w * dH) / h, 10);
} else if ((h < this.maxHeight) && (w > this.maxWidth)) {
// Si la largeur depasse la taille maximale
dW =this.maxWidth;
// On recalcule la taille proportionnellement
dH = parseInt((h * dW) / w, 10);
}
// On ecrit l'image dans le document
// Récupération de l'objet conteneur
var conteneur = document.getElementById(oImg.conteneur);
// On test si l'objet a bien été récupéré
if(conteneur)
{
// On met la taille à l'objet Image
oImg.width = dW;
oImg.height = dH;
// On ajout l'image à la fin du conteneur
conteneur.appendChild(oImg);
}
/* Attention, vu que l'on est dans une fonction évenement, on n'est plus a
* l'endroit ou l'on a exécuter le script. Le document.writeln risque d'écrire
* n'importe ou, et peut même remplacer le texte du document complet. */
}
}
// Affectation du chemin de l'image a l'objet
oImg.src = inImg;
};
//-->
</script>
<script type="text/javascript">
<!--
redimImage('photos_etablissements/etablissement_<%=id%>.jpg', 75, 50, 'cadre_photo_petit');
//-->
</script>
J'ai pourtant vidé tous mes fichiers temporaires. Comment diable ce fichu IE garde-t-il les diemensions de l'ancienne photo.
Merki pour votre aide..
A voir également:
- Fonction Javascript reste en mémoire dans IE
- Mémoire vive - Guide
- Fonction si et - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Mon pc s'allume mais lécran reste noir sans bip - Guide
- Ie tab - Télécharger - Outils pour navigateurs
4 réponses
arf, pas cool ça. tu parle bien de l'historique là, pas des fichiers temporaires?
Et si c'est le cas, il y aurait-il un moyen de brider tout ça. Genre empêcher le navigateur d'enregistrer la page mais à partir de la page elle-même et non par le navigateur ça va sans dire :)
ps : je peu pas encore tester car c'est un intranet mais je m'y colle dès demain !
Merci.
Et si c'est le cas, il y aurait-il un moyen de brider tout ça. Genre empêcher le navigateur d'enregistrer la page mais à partir de la page elle-même et non par le navigateur ça va sans dire :)
ps : je peu pas encore tester car c'est un intranet mais je m'y colle dès demain !
Merci.