Cette page liste les réponses à apporter aux erreurs de syntaxe détectées par le navigateur.
Vous pouvez la lire en continu ou retrouver un message d'erreur précis.
Erreur d'écriture
A mon avis, la principale cause d'erreur reste due aux erreurs de frappe.
Dès qu'une erreur survient, vérifiez l'écriture de la ligne responsable de l'erreur.
Vérifiez que les noms de variables ou de fonctions sont corrects et respectez la différence Majuscule/Minuscule.
Confusion Majuscules/Minuscules
Le javascript respecte la casse (différence entre majuscules et minuscules).
Cela oblige à être très vigilant à l'écriture :
- des fonctions propres au javascript
var today=new date; n'a pas de sens. Date prend une majuscule.
- de vos variables
Si vous déclarez var Nombre=100, la variable nombre n'existe pas.
Si votre navigateur vous annonce :
'a' est indéfini
Cela signifie que la variable ou la fonction "a" n'a pas été déclarée ou a été mal orthographiée.
La structure d'un script
Si la structure du script d'un programme n'est pas respectée, une erreur surviendra à coup sûr.
Le plus souvent, le message n'indique pas la bonne ligne, ce qui rend la recherche de l'origine assez fastidieuse.
Il y a deux cas principaux d'erreur de structure :
- manque un ; entre deux instructions placées sur la même ligne,
- non concordance entre les accolades ouvertes et fermées qui vont obligatoirement par paires.
Les erreurs de déclaration de chaînes
Les chaînes de caractères sont décrites en détail dans cet article.
L'erreur la plus courante rencontrée est :
Constante de chaîne non terminée
et aussi :
';' attendu
) attendu
Ce message apparaît dans ce cas simple :
var chaine="Bonjour;
Ici, l'erreur est simple et le message est adapté, la chaîne n'est pas terminée par un marqueur de fin de chaîne. Pour corriger, il faut écrire :
var chaine="Bonjour";
Il y a naturellement des cas de chaîne plus complexes, en particulier quand les marqueurs de chaînes (" et ') sont alternés :
alert("Il m'a dit : "Bonjour"")
L'objectif est d'afficher un message contenant Il m'a dit : "Bonjour"
La difficulté est ici d'afficher un caractère qui sert de marqueur de chaîne. Il existe de nombreuses solutions pour répondre au besoin :
alert("Il m'a dit : \"Bonjour\"")
alert('Il m\'a dit : "Bonjour"')
alert("Il m'a dit : "+'"Bonjour"')
Propriété et méthode d'un objet
L'article "le javascript, langage objet" présente en détail ce type de programmation.
Le message d'erreur Propriété ou méthode non gérée par cet objet signifie que vous essayez :
- d'accéder, sur un objet, à une propriété qui n'existe pas.
- d'appeler, sur un objet, une méthode qui n'est pas définie.
Cette erreur peut être due :
- à une erreur d'écriture, confusion Majuscule/Minuscule, faute de frappe, ...
- à une incompatibilité entre navigateurs
- à une erreur de conception (la propriété/méthode est utilisée, mais pas encore définie)
Utilisation des frames
Les frames sont présentées en détail dans l'article "Javascript et les frames".
Si le message d'erreur contient parent ou top, vous devez tout de suite penser aux frames.
L'objet parent correspond à la page mère, celle qui contient la déclaration des frames, via les balises <FRAME> et <FRAMESET>.
L'objet top correspond à la page la plus haute dans la hiérarchie des frames.
Un message 'parent.XXXXX' est indéfini montre que le script s'attend à trouver un objet ou une variable dans la fenêtre parent.
Le script de la fenêtre parente est sûrement incomplet.
L'appel aux fonctions
Les fonctions définies par le développeur.
Si vous définissez cette fonction :
function MaFunction() {
return 100
}
Un appel à la fonction de ce type :
var nombre=MaFunction
crée l'erreur :
'MaFunction' est indéfini
Dans ce cas, le navigateur recherche la variable MaFunction qui n'existe pas.
La bonne syntaxe est bien :
var nombre=MaFunction()
La compatibilité entre navigateurs
Il faut savoir que Netscape et Internet Explorer, les 2 navigateurs majoritaires (sinon les seuls) ont pris des libertés avec les normes du HTML et du javascript.
On peut même dire que les normes ont été créées en fonction des possibilités et des avancées des navigateurs.
Netscape ne supporte pas la moindre erreur de balises HTML. Par exemple, une balise </TABLE> qui manque rend une page blanche. Pareil avec le javascript, Netscape est très rigide et aussi en retard dans l'implémentation des normes (JavaScript, feuilles de style).
Les principaux problèmes de compatibilité viennent surtout des dernières fonctionnalités :
- le Dynamic HTML (DHTML) :
Les calques affichés par les balises DIV (IExplorer) et LAYER (Netscape)
- le gestionnaire d'événement :
La détection de la position de la souris, de la frappe sur le clavier,...
- le modèle objet de document (DOM) :
L'arborescence des objets window, document, navigator, ... Certains objets n'existent que pour un des navigateurs :
Le tableau Plugins, qui contient tous les plugins supportés par le navigator, n'existe que sur Netscape
L'objet screen n'est reconnu que par Internet Explorer.
La seule solution est souvent de détecter le type de navigateur et de créer un script adapté pour chacun.
La règle est de tester avec le maximum de configurations possibles.
Pour information, sur le site Tout JavaScript.com (en septembre 2000) :
  - 70% des visiteurs utilisent Internet Explorer 5,
  - 15% utilisent Internet Explorer 4,
  - 15% utilisent Netscape,
  - 2% utilisent autre chose.
- 90% utilisent le système Windows (95,98 ou NT)
- 5% utilisent Macintosh
- 5% utilisent autre chose (BeOS, Linux, ...)
Ces chiffres sont à nuancer, car le public du site est un public averti, sûrement en avance technologique par rapport à la moyenne de la population des internautes.
|