Voici quelque chose que je me réfléchis après d'innombrables heures de fixation de JS à être croisée croisée compatible (principalement c'est-à-dire): pourquoi em> n'est pas javascript cohérents em> cohérents de navigateur? < / p>
Je veux dire, pourquoi JS ne peut-il pas être gentil comme Java et Flash? Au lieu de cela, nous devons recourir à des cadres comme JQuery. Ne me méfiez pas, ils me font mal la vie - mais pourquoi existent-ils même en premier lieu? P>
Y a-t-il une raison historique à cela? Les entreprises déploient-elles des navigateurs qui expédient-elles simplement leur propre moteur JS? Quelles sont les politiques qui rendent la normalisation si difficile? P>
(Remarque: Je comprends qu'une bonne partie du problème est liée à DOM, mais la question reste). em> p>
4 Réponses :
Les sociétés déploient-elles des navigateurs simplement expédier leur propre moteur JS? p> blockQuote>
Yup, c'est probablement la raison principale. Il n'y a pas de moteur JS unifié; Il existe différentes implémentations de ECMAScript . P>
Tout comme les navigateurs avec le rendu, il existe différentes manières d'interpréter les spécifications, différentes façons de les mettre en œuvre, et même pire: différentes façons de combler les spécifications de lacunes!
Vous pouvez laisser en toute sécurité «probablement». ;)
Le langage de base JavaScript fort> pour la plupart est strong> cohérent (faisant référence à la version 3 de la version 3 de ECMAScript publiée en 1999.) P>
Ce sont les implémentations DOM qui causent des maux de tête. Parce que, à un moment donné, aucune spécification DOM n'avait que les navigateurs pouvaient faire ce que l'enfer souhaitée en termes de constitution des règles pour accéder et manipuler des éléments HTML dans une page Web. P>
Par exemple: p>
Il existe également des problèmes liés au support CSS du navigateur. P>
Les incohérences de base de la langue seraient des choses comme p>
mais oui, en bref, le point est-il qu'avant, il n'y avait pas de norme. Depuis lors, le W3 a proposé des normes, mais chaque fournisseur de navigateur a sa propre façon de faire face à la mise en œuvre. Il n'y a pas d'organe directeur qui oblige les fournisseurs à appliquer pleinement les spécifications. P>
fenêtre.addeventlistener code> pour les navigateurs prenant en charge DOM, tandis que
fenêtre.attachevente code> pour IE. li>
textContent code> pour les navigateurs prenant en charge DOM,
innertext code> pour IE. LI>
getElementyid code> est buggy dans IE et Opera car il renvoie des éléments par nom li>
getattribute ('href') code> renvoie des valeurs incessionnelles li>
ul>
+1 c'est vrai et important à noter. Le noyau de langue est i> fiable. Le DOM est où des cadres tels que JQuery entrent (et font beaucoup de bien.)
"La langue principale pour la plupart est cohérente." Pas entièrement: par exemple, array.pototype.sort code> n'est pas cohérent dans la stabilité, la disponibilité de fonctions telles que
array.pototype.indexof code> et
fonction.pototype.bind code> varie considérablement, itérant sur toutes les propriétés d'un objet utilisant
pour (... in ...) code> n'est pas (ou non, je ne suis pas sûr) cohérent, vous aurez besoin < Code> HasownProperty code>.
array.pototype.indexof code> ne fait pas partie de ECMAScript V3. Mozilla vient de le jeter dans Gecko en 2004/2005. IE6 a été développé en 99-00 et publié en 01. Alors, comment auraient-ils pu la mettre en œuvre si ce n'était pas dans la langue?
pour..in code> est cohérent. Le
HasownProperty code> est cohérent. Si vous étendez
objet.pototype code> Ça apparaîtra sans utiliser
hasowroproperty code> mais le comportement doit être cohérent à travers la carte.
fonction.pototype.bind code> n'est pas défini dans Firefox ou Chrome, ni défini dans IE. Je pense que vous confondez des fonctions définies par l'utilisateur qui sont naturellement incompatibles et pensant qu'ils sont intégrées?
Pouvez-vous me donner un exemple de trier code> incohérences entre les navigateurs?
Vous pouvez vous référer à la version 5 de la version 5 de ECMAScript avec fonction.Prototype.bind code>, mais comment cela serait-il logique de se plaindre d'une version linguistique publiée en décembre 2009 lorsque nous parlons de navigateurs qui ont été sortis depuis des années? Opera, c'est-à-dire Chrome V8, Gecko / Spidermonkey / Rhino, .Net, Acrobat, ICAB, KDE, SAMBA 4, KHTML Tous sont ECMA-262, édition 3. (et plus ..) Donc, il serait donc logique d'utiliser ECMA- 262 Edition 3 comme étant la norme pour le "noyau". Pas une version publiée l'année dernière.
GetatTtribute est buggé sous une autre situation dans une version d'IE. Si vous avez un formulaire avec un élément nommé "action" dedans et que vous faites forme.getattribute ("action"), il retournera l'élément sous la forme non l'action d'attribut du formulaire dans IE 6. Je ne me souviens pas Si le même comportement se produit aussi sur une autre version, mais cela pourrait être là dans IE 7 également.
Ok, tu as raison, je mêle plusieurs choses. Sort CODE> n'est pas stable dans (au moins) Chrome, ou au moins, il était en septembre 2009. Voir
Les navigateurs roulent leur propre implémentation, simples et simples. C'est la même raison pour laquelle le rendu et le CSS et tout ce qui sont différents entre les navigateurs. Java / flash / etc. sont plus universels car ils sont abstraits hors du navigateur et accessibles via un plugin de quelque sorte. Mais leurs implémentations de base réelles sont séparées du navigateur et contrôlées par un seul fournisseur. P>
Ajouter aux autres réponses: il est em> une raison historique à cela. Je peux écrire cela moi-même, mais citant Wikipedia est plus facile sur les doigts: P >
JavaScript a été développé à l'origine par
Brendan Eich de Netscape sous le
Nom Mocha, qui a ensuite été renommé à
Livrescript, et enfin à JavaScript.
Livrescript était le nom officiel de
la langue quand elle expédiée pour la première fois
Communiqués bêta de Netscape Navigator
2.0 en septembre 1995, mais il a été renommé JavaScript dans un joint
Annonce avec Sun Microsystems sur
4 décembre 1995 quand il a été déployé
Dans le navigateur Netscape version 2.0b3. P>
[...] p>
JavaScript très rapidement gagné
Succès généralisé en tant que client
Langue de script pour les pages Web. Comme un
conséquence, Microsoft a développé un
dialecte compatible de la langue,
nommer cela jscript pour éviter la marque de commerce
problèmes. JScript a ajouté de nouvelles méthodes de date
Pour réparer les méthodes non liées au Y2K dans
JavaScript, qui étaient basés sur
java.util.date. Jscript a été inclus
Dans Internet Explorer 3.0, publié dans
Août 1996. Les dialectes sont
perçu comme si semblable que le
termes "javascript" et "jscript" sont
souvent utilisé de manière interchangeable. Microsoft,
Cependant, note des dizaines de façons dans lesquelles
Jscript n'est pas conforme à l'ECMA. P>
En novembre 1996, Netscape a annoncé
qu'il avait soumis JavaScript à
ECMA International pour examen
comme une norme de l'industrie, et
Les travaux ultérieurs ont abouti à la
Version normalisée nommée ECMAScript. P>
blockQuote>
Comme vous pouvez le constater, la norme, ECMAScript, a été développée plus tard que la langue d'origine. Il s'agit simplement d'adapter cette norme dans les implémentations actuelles des navigateurs Web, qui se passe toujours, de même que le développement de ECMAScript elle-même (par exemple, voir la spécification de ECMAScript 5 , Publié décembre 2009). P>
Étant donné que la plupart des raisons pour lesquelles vous codirez quelque chose dans JavaScript sera associé à dom. Il est correct de confondre les deux IMHO