Dernier "truc qui gonfle" en date : sa gestion du cache hyper-agressive, et surtout dans le cas d'XmlHttpRequest (quand on a une version qui l'implémente correctement*).
J'ai implémenté un petit Ajax maison, au final j'ai un script "server.php" qui marche ainsi:
server.php?call=ecritFichier&p[]=TEXTE écrit "TEXTE" dans "fichier.txt", et affiche "1" ou "0" selon la réussite ou l'échec de l'opération.
server.php?call=litFichier lit le contenu de "fichier.txt" et l'affiche.
Me voici fièrement avec un champ et 2 boutons "Lire" et "Ecrire" (le contenu du champ dans le texte).
Si j'ouvre ça dans IE/DeepnetExplorer/FireFox/Netscape/AOL/Safari/(et peut-être même d'autres), ça fonctionne parfaitement. Mais si j'ouvre ce satané Opéra....
J'arrive sur la page
Je clique sur "Lire", oh je vois le contenu de mon fichier (mettons "bidule").
Je tape "machin" dans le champ.
Je clique sur "Ecrire", oh miracle, il m'affiche "bidule" ce gland...
Dans le doute je re-clique sur "Lire" il persiste à m'afficher "bidule".
Alors je recharge la page et je re-re-clique sur "Lire" : "bidule"...
J'ouvre un nouvel onglet sur la même page, je clique sur "Lire" : "bidule".
Là un terrible doute m'assaille : je l'ai bien modifié ce fichier ?
Alors je vais voir "fichier.txt" : "machin".
Donc là j'ai décidé que je n'essaierai plus d'optimiser pour Opera, j'en ai vraiment plein le cul
Cependant, si quelqu'un a un semblant de solution, qu'il me la donne, je lui enverrai peut-être même un bonbon lutti par la poste.
Si vous voulez tester : http://naholyr.free.fr/XHR/
Le fichier modifié est http://naholyr.free.fr/XHR/fichier.txt
Et qu'on ne vienne pas me dire qu'XmlHttpRequest est trop jeune, tous les autres navigateurs modernes l'implémentent parfaitement. Vraiment dommage, parce qu'à part ça (et sa gestion boiteuse des CSS, et sa facheuse tendance à freezer sous Windows, et sa fichue barre de pub, et ... ah non ça doit être tout) je l'aime bien ce navigateur.
(*) Oui parce que "de base" avec le code standard pour utiliser une fonction de callback avec un objet XmlHttpRequest "conn"
Code : Tout sélectionner
conn.onreadystatechange = function() {
if (conn.readyState == 4 && conn.status == 200) {
// Si une fonction de callBack a été définie
if (typeof callBack == "function") {
callBack(callerObj);
return;
}
}
};Obligé de se trimballer une variable pour savoir si on a déjà appelé la fonction de callback ou non... Bref...