2010-05-31 6 views
2

Je suis tellement en colère en ce moment. J'ai perdu des heures et je ne sais pas pourquoi cela arrive. Son une diatribe demi mais je vais essayer de le garder courtPourquoi Firefox + Mon code Détruit FireFox refresh

  1. Mon code ne fonctionnerait pas, même après avoir rafraîchi il a été brisé
  2. je fixe mon code ou si je pensais parce qu'il cesse de fonctionner sans me changer quoi que ce soit (vous penseriez que j'imagine ceci ...)
  3. Je décide en quelque sorte de faire une nouvelle fenêtre ou étiquette je cours mon code et vérifie que cela fonctionne.
  4. j'écrire plus de code et voir tout est brisé à nouveau
  5. Je test d'écriture dans une nouvelle fenêtre et voir mon code ne fonctionne
  6. Je vois mon travail ne marche pas de code et Firebug N'AIDE
  7. Je remarque quand je créer un nouvel onglet tout fonctionne
  8. Je réalise que rafraîchir ne fonctionne pas et je DOIS faire un nouvel onglet pour que mon code fonctionne.

Ensuite, je savais instantanément quel était le problème. Je modifie un display: none textbox mais je n'ai pas correctement défini les valeurs. Je ne peux pas le voir parce qu'il est caché. Maintenant, certains d'entre vous pourraient dire que c'est ma faute, car lors d'un rafraîchissement, toutes les données peuvent être en cache. Mais voici le kicker. J'utilisais des données POST. J'ai posté entre les rafraîchissements à chaque fois.

Quel est le point d'utilisation du POST lorsque les mêmes données sont mises en cache et utilisées de toute façon? S'il n'y a aucune chance pour un moteur de recherche de suivre un lien block user, alors pourquoi devrais-je prendre la peine de faire quoi que ce soit lorsque la sécurité ou les actions répétées ne sont pas un problème? POST n'a pas l'air de faire quoi que ce soit.

+0

La barre d'outils Firefox Web Developer https://addons.mozilla.org/en-US/firefox/addon/60/ dispose d'une option permettant de Afficher les éléments cachés. Ça pourrait être utile. –

Répondre

5

On dirait que vous êtes frappé par la mémorisation de la valeur du champ de forme. Lorsque vous utilisez back and forward (mais lorsque le bfcache n'est pas utilisé dans les navigateurs qui le possèdent), ou dans certains navigateurs lorsque vous appuyez sur reload, le navigateur tente de conserver les valeurs de chaque champ de formulaire qui étaient présents lorsque la page a été déchargée pour la dernière fois. C'est une fonctionnalité destinée à permettre à l'utilisateur de naviguer et d'actualiser des formulaires sans perdre toutes les données qu'ils ont laborieusement tapées.

Vous ne pouvez donc pas vous fier à la valeur d'un champ de formulaire qui est la même au moment du chargement de la page, car il semble provenir de la source HTML. Si vous avez un état DOM qui dépend de la valeur d'un champ de formulaire (par exemple un formulaire où certains champs sont masqués ou désactivés selon la valeur d'un autre champ), vous devez mettre à jour cet état au moment du chargement de la page pour refléter les valeurs de champ que le navigateur a silencieusement mises en place (aucun événement onchange ne se produit). Et n'utilisez pas les entrées cachées pour stocker les variables de script du tout.

Le comportement exact varie selon les navigateurs. Par exemple, certains navigateurs gardent les valeurs des champs cachés et d'autres non. Mozilla et WebKit mettent les nouvelles valeurs instantanément lorsque les champs sont analysés dans le DOM, tandis que IE ne le fait que sur window.onload ... et Opera, de manière aggravante, le fait juste après window.onload, donc vous ne pouvez l'attraper qu'en réglant un 0- timeout pour mettre à jour l'état après onload. C'est un désordre méchant.

+0

J'ai pensé autant mais la seule chose qui me dérange n'est même pas le fait que je mets la valeur à quelque chose de si faux que je devrais avoir une exception mais le fait que je rafraîchis après un événement POST.J'ai même vu d'autres valeurs sur la mise à jour de la page et de nouveaux formulaires ajoutés. Je me dis si (assez de) le changement dom les valeurs se réinitialiseraient. C'est juste trop de choses qui se sont mal passées pour rendre ma journée vraiment pénible :( –