[FAQ] fr.comp.infosystemes.www.auteurs : JavaScript

Le
voir
Archive-Name: fr/www/faq-JavaScript

Nota : Cette FAQ est en cours de réécriture.

Sommaire

* 1 Présentation
* 2 1. Généralités
* 3 2. Le langage
* 4 3. Quelques scripts pratiques
* 5 4. Versions, compatibilité
* 6 5. Sécurité
* 7 6. JavaScript et
* 8 7. Ressources hypertextes
* 9 A titre de conclusion

Présentation

La charte de fr.comp.lang.javascript spécifie que ce forum permet
de discuter d'ECMAScript (cf
http://fr.wikipedia.org/wiki/ECMAScript) qui est une
spécification de langage script pour le web. Javascript n'est
qu'une des implémentations de ce langage.

ECMAScript permet de dynamiser des pages web depuis le navigateur
internet (php fait la même chose depuis le serveur qui envoie ces
pages web). L'implémentation variera avec le navigateur
utilisé :

* Internet Explorer (versions 6 et 7) repose sur le moteur
Active Scripting propose JScript (javascript V1.5);
* Mozilla et Firefox (entre autres) reposent sur le moteur Gecko
et proposent Javascript (V1.7).

fr.comp.lang.javascript pourrait également vous être utile si
vous vous intéressez à Ajax (cf
http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML)

Certaines de vos questions trouveront peut-être des réponses
ailleurs à savoir :

* fr.comp.infosystemes.www.auteurs
* fr.comp.algorithmes
* fr.comp.lang.general
* fr.comp.developpement
* fr.comp.lang.java
* fr.comp.lang.php

Voire sur le BIG8 :

* comp.lang.javascript

Ou sur des hiérarchies "propriétaires" chez MicroSoft ou
Mozilla.

Les anglophones consulteront avec profit une vraie FAQ en
http://www.jibbering.com/faq

Vous trouverez en
http://gnouf.info/mediawiki/index.php?titleúQ_fr.comp.lang.javascript
la version hypertexte intégrale de ce document.

1. Généralités

Les informations données ici sont censées vous servir quelle que
soit votre implémentation d'ECMAScript. Javascript est le support
principal, si l'utilisation avec JScript devait demander une
adaptation, des précisions seraient apportées.

Qu'est-ce-que JavaScript ?

Javascript un langage de script orienté objet que savent
interpréter un grand nombre de navigateurs. Lorsque le navigateur
reçoit un document ce dernier contient :

* des instructions (x)html destinées à la mise en forme du
document;
* des instructions "javascript" qui permettront un traitement
plus complexe. Ces instructions peuvent aussi bien être le
coeur du document (on parlera alors d'une application)
qu'être des accessoires destinés par exemple à encadrer la
saisie dans un formulaire.

Au coeur javascript on trouve donc la notion d'objet : à un objet
on associera deux tableaux :

* un tableau de propriétés (les différentes valeurs qui
définissent l'objet);
* un tableau de fonctions (méthodes) qui permettent de lire ou
modifier les propriétés.

Il existe des objets prédéfinis : (window, document, form,)
qui permettent d'interagir avec l'utilisateur du document (x)html
qui contient ces scripts. Il est également possible de définir
ses propres objets afin de répondre à des besoins précis.

A quoi cela sert-il ? (entre autres)

* Effectuer des vérifications dans vos formulaires avant de les
soumettre au serveur (n'autoriser l'envoi que si les champs
sont conformes à ce qui est attendu);
* Améliorer la présentation de vos documents (y compris les
formulaires) par exemple en changeant la couleur de fond pour
indiquer le champ actif;
* Proposer des utilitaires qui par exemple interdisent à des
robots de récupérer les adresses électroniques,
* Proposer des jeux comme tétris, sudoku, pendu,

Que faut-il pour débuter ?

* un accès à un tutoriel accessible avec des explications
claires et des exemples "clés en main" comme en
http://fr.selfhtml.org/javascript;
* un navigateur avec l'exécution de scripts activée;
* un éditeur de texte avec coloration syntaxique comme :

* notepad++ pour windows (via
http://www.framasoft.net/article2579.html);
* vim pour windows ou linux (via
http://www.framasoft.net/article218.html).

Existe-t-il des outils/programmes pour faciliter l'écriture de
scripts ?

Il existe des environnement de développement (ou "framework") qui
permettent de gérer html, css et scripts.

Pour linux, mac et windows :

* http://www.aptana.com/download_all.php

2. Le langage

Incorporer des scripts dans ses documents (x)html

Vous pouvez incorporer vos scripts dans la section
<HEAD></HEAD> de votre document, soit directement soit, de
préférence, en indiquant l'adresse du ou des fichiers qui
contien[nen]t les scripts utiles.

Ceci donnera donc :

<head>
<title></title>
<script type="text/javascript">
<!--
function nom_de_la_fonction()
{
var x = 1;
var y = "";

}
}
//-->
</script>
</head>

Il peut y avoir plusieurs fonctions. Si les définitions sont
placées dans la section <HEAD>, elles ne risquent pas d'être
interprétées lors de la mise en forme du document. L'ajout de
commentaires html ("<!--" et "//-->") est une sécurité
supplémentaire.

ou

<html>
<head>
<title></title>
<script type="text/javascript" src="nom du script.js">
</script>
</head>

Mais vous pouvez également les inclure dans le corps (entre les
balises <BODY> et </BODY>, *à condition* de veiller à ce que le
script définissant les fonctions soit placé avant les appels à
ces fonctions.

Invoquer les scripts depuis le document html

On peut incorporer une section <SCRIPT></SCRIPT> dans la
section <BODY></BODY>. On ne peut pas y définir de fonction,
mais on peut par contre appeler des fonctions javascript ou des
fonctions définies dans la section <HEAD></HEAD> de façon à
ce que ce soit le résultat de la fonction qui soit affiché par
le navigateur : Ce qu'affichera le navigateur pourra donc être
légèrement différent de ce que contient le document. Ainsi, on
pourrait définir une fonction rot13(paramètre) dans les entêtes
et placer un lien mailto qui se présenterait ainsi :
"mailto:<"<script

type="text/javascript">document.write(rot13("partiegauchecryptée@partiedroitecryptée.tld"))</script>">
suite du lien" : un programme qui chercherait à extraire
automatiquement aurait une information inexploitable, mais le
navigateur qui peut interpréter javascript aura une adresse
lisible et exploitable.

On peut également exploiter les événements : Pour certains
objets (élément de formulaire, image,fenêtre) on peut
détecter des évènements suivants et appeler des scripts en
fonction de l'événement survenu. Leur intitulé est assez
explicite, toutefois, pour plus d'informations:
http://w3c.org/TR/WD-html40/interact/scripts.html (19.1.4
intrinsic events)

onchange="x;" onclick="x;" onblur="x;"
onfocus="x;" ondblclick="x;" onkeydown="x;"
onkeypress="x;" onkeyup="x;" onmousedown="x;"
onmousemove="x;" onmouseover="x;" onmouseout="x;"
onmouseup="x;" onreset="x;" onselect="x;"
onSubmit="x;" onload="x;" onunload="x;"

x correspond soit à la suite d'instructions attendue soit au nom
du script que l'on appelle.

* Quelles sont les caractéristiques syntaxique de base ?

La syntaxe s'apparente à celle du Java, et donc du C & C++. On
retrouve en tous cas des éléments communs à tous langage
impératif :

- On peut manipuler des variables scalaires, des tableaux ou des
objets;
- On peut faire des tests (if..else ifelse, case)
- On peut faire des boucles (while, for)
- Il existe des objets particuliers (dates, mathématiques,)
qui apportent des fonctions thématiques. - Les commandes sont
séparées par un point-virgule ;
- Attention au respect de la casse. Effectivement, document.robert
est différent de document.ROBERT
- La structure des fonctions est une structure de block; on
utilise { en début de fonction et } à la fin
- Le premier élément d'un tableau déclaré est l'élément 0;
ie. tab[0]
- Pour comparer deux élements, on utilise ==
- Pour affecter une valeur à un élément, on utilise =
- Les opérateurs logiques: && (AND) ; || (OR) ; ! (NOT)
- Une chaîne de caractères (string) se met entre ' ou "
- // début d'un commentaire se terminant à la fin de la ligne
- Le nom d'une variable doit commencer par une lettre, mais peut
contenir des chiffres et _
- Une variable déclarée avec var est une variable locale à la
fonction dans laquelle elle est déclarée. Par défaut, les
variables sont globales.

* Quelle est la structure d'une fonction ?

function nom (paramètre) { instructions; }

-La fonction est appelée via nom(paramètre)
-Si une fonction contient plusieurs paramètres, ils sont
séparés par une virgule dans la déclaration et dans l'appel de
la fonction.
-Si on veut retourner une valeur qui a été "calculée" par cette
fonction, inscrire return var; Et pour appeler la fonction qui
donnera une valeur à var: var=nom(paramètre)

* Comment modifier la valeur d'un objet de la page ?

La syntaxe est similaire à celle des langages de programmation
orienté-objet (Delphi,) Ainsi, soit le formulaire nommé
formulaire1 et la textarea nommée champtexte dans laquelle vous
voulez écrire Robert:

document.formulaire1.champtexte.value='Robert';

3. Quelques scripts pratiques

Comment détecter le navigateur utilisé ?

<SCRIPT type="text/javascript">
<!--
browserName = navigator.appName;
browserVer = navigator.appVersion;
//-->
</SCRIPT>

navigator.appName est une chaîne dont la valeur sera "Netscape"
ou "Microsoft Internet Explorer".

La chaîne navigator.appVersion donne la version du navigateur
ainsi que le système d'exploitation. Pour obtenir uniquement la
version du navigateur : parseFloat(navigator.appVersion)

Comment détecter la résolution d'écran ?

<SCRIPT type="text/javascript">
<!--
if (navigator.javaEnabled())
{
var toolkit= java.awt.Toolkit.getDefaultToolkit();
var screen_size = toolkit.getScreenSize();
width = screen_size.width;
height = screen_size.height;
}
//-->
</SCRIPT>

Dans le code html on peut utiliser les variables width et height:
<IMG SRC="image.gif" HEIGHT="500" WIDTH="&{width - 50};"> Ici la
taille horizontale de l'image est diminuée de 50 pixels par
rapport à la résolution de l'écran.

Comment détecter la date, l'heure et le fuseau horaire ?

<SCRIPT type="text/javascript"> </SCRIPT>

Comment ouvrir et fermer une fenêtre du navigateur ?

<SCRIPT type="text/javascript"> </SCRIPT>

Dans le texte html: <a href="nomdelapage.htm"
OnClick="wopen('nomdelapage')">

Dans ce cas, si le browser utilisé par le visiteur ne supporte
pas le javascript, la page sera affichée dans la fenêtre
courante. Les valeurs des "attributs" sont 0 (false) et 1 (true);
height est la hauteur en pixels de la fenêtre, et width la
largeur.

<SCRIPT type="text/javascript"> </SCRIPT>

Dans le texte html de la page de la fenêtre à fermer: <a
href="javascript:wclose()">

Comment réaliser un Rollover ? (JavaScript 1.1)

<SCRIPT type="text/javascript"> </SCRIPT>

La condition version == "ok" vérifie que le browser supporte les
objets images. Pour ce faire, il faut faire une détection du
browser, qui doit être compatible JavaScript1.1 (voir 4.
Versions, compatibilité).

Dans le texte de la page html, si l'image1.gif doit être
remplaçée par l'image2.gif lorsque le curseur passe sur l'image:
<A HREF="page.htm" OnMouseover="on('image1')"><IMG
SRC="image1.gif" NAME="image1"></A>

Comment empêcher l'envoi d'un formulaire si celui-ci n'est pas
correctement validé ?

Chaque formulaire possède l'événement onSubmit. Si on lui
retourne true, le formulaire est envoyé comme d'habitude, par
contre si on lui retourne false, il annule la demande d'envoi et
attends une nouvelle validation.

<FORM onSubmit="return (document.forms[0].txt.value!=)> <INPUT
TYPE="text NAME="txt"> <INPUT TYPE="submit"> </FORM>

Comment empêcher un lien d'être activé ?

Chaque lien possède l'événement onClick. Si on lui retourne
true, le lien est suivi comme d'habitude, par contre si on lui
retourne false, il redonne la main sans charger le nouveau
document.

<A HREF="page1.htm" onClick="return true">On y va</A>
<A HREF="page1.htm" onClick="return false">On y va pas</A>

* Puis-je tout le temps utiliser cette technique ?

Oui, pour tous les événements existants, le return true est
considéré par défaut et vous pouvez lui retourné false pour
qu'il annule la demande d'ordre sauf pour la barre de status et
onMouseOver où return false ou l'absence de return implique que
le navigateur fait comme d'habitude et return true implique que le
navigateur ignore la barre de status et laisse mettre le texte.

4. Versions, compatibilité

* Quels sont les navigateurs qui interprètent le JavaScript ?

Cette liste est à metre à jour en fonction des navigateurs
actuellement utilisés.

Il est important de ne pas générer vos pages *exclusivement* en
JavaScript dans la mesure où un certain nombre de visiteurs ne
pourront pas voir correctement votre page. Par exemple, les
utilisateurs de Lynx ou NCSA Mosaic ou UdiWWW; ainsi que ceux qui
ont désactivé le JavaScript. (paragraphe à actualiser)

* Comment éviter les redondances avec les navigateurs
non-JavaScript ?

Les navigateurs qui ne reconnaissent pas le JavaScript
considèrent vos scripts comme du simple texte et l'affichent donc
sur la page sans l'exécuter. Pour éviter cela, rajoutez au
début et à la fin de votre script les balises de remarque:

<SCRIPT type="text/javascript"> </SCRIPT>

* Comment éviter des erreurs de compatibilité ?

- Une solution consiste à détecter le navigateur qu'utilise le
visiteur et exécuter/ne pas exécuter les commandes qui
poseraient problème à l'aide de commandes de test (if).

- Il est également possible d'empêcher l'ouverture des boites de
dialogues d'erreur JavaScript en écrivant ceci dans votre page
html entre </title> et </head>:

<SCRIPT type="text/javascript"> </SCRIPT>

-Vous pouvez aussi détecter les objets que vous pourriez utiliser
et effectuer des opérations avec/sur ceux-ci uniquement si ils
existent: if (document.images) {xxx} if (document.layers) {xxx}

5. Sécurité

* Un site peut-il voler le numéro de carte bancaire du visiteur
à son insu, sans que celui-ci l'ait tapé dans un formulaire
de ce site ?

C'est peu probable, mais des trous de sécurité dans
l'implémentation du Javascript et de la mémorisation dans le
cache d'un numéro de carte bancaire (tapé lors de la visite d'un
autre site) ont existé. Lorsqu'un trou de sécurité est
découvert, il est rapidement corrigé et une nouvelle version du
navigateur est distribuée. Il est donc conseillé d'utiliser les
dernières versions des navigateurs, ou du moins la dernière
version d'une génération.

* Que NE peut-on PAS faire via JavaScript ?

En théorie:
- Accéder (lire, écrire, exécuter) aux fichiers du disque dur
du visiteur ou du serveur.
- Accéder (lire, modifier) aux informations personnelles du
visiteur (paramètres de configuration, adresse e-mail, adresse
ip)

6. JavaScript et

AJAX (il faudra faire une synthèse et proposer des références
francophones)

AJAX est un acronyme pour "Asynchronous Javascript And XML". Cette
technologie repose sur l'objet XMLHttpRequest. 2galement connu
sous le nom "Web 2.0", il permet l'envoi et la récupération de
données depuis un serveur sans avoir à recharger la page
courante

* Documentation Mozilla :

* http://developer.mozilla.org/en/docs/XMLHttpRequest

* Documention MSDN :


*http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_xmlhttprequest.asp
*
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/63409298-0516-437d-b5af-68368157eae3.asp

* Bibliothèques AJAX et tutoriels :

* http://jibbering.com/2002/4/httprequest.html
* http://www.ajaxtoolbox.com

Remote Scripting, une alternative à l'objet XMLHttpRequest :
http://www.ashleyit.com/rs/main.htm

JScript (à actualiser)

Microsoft essaye de rendre son browser compatible avec le
JavaScript de Netscape. Le langage est renommé JScript et
contient quelques fonctionnalités supplémentaires, tout en
étant pas 100% compatible avec le JavaScript. Plus d'infos:
http://microsoft.com/france/jscript/techinfo/jsdocs.htm

JAVA

Javascript peut opérer avec le JAVA, mais ils sont différents;
de par leur syntaxe et leur domaine d'application. Il est possible
d'utiliser des données Java dans vos scripts; par exemple pour
détecter la résolution d'écran du visiteur (via l'AWT) et
afficher tel ou tel image en conséquence. Java est une langage de
programmation, JavaScript un langage de scripts. Reportez-vous à
la FAQ Java du groupe fr.comp.lang.java : FTP-Archive-Name:
ftp://ftp.asynchrone.net/pub/faq/by-name/fr/faq-java

VBScript (toujours d'actualité ?)

Microsoft développe un autre langage de scripts: VBScript. C'est
une sorte de langage d'extension (macro) à l'instar du VBA
(Visual Basic). Il y a quelques ressemblances avec le JavaScript,
notamment au niveau de la syntaxe. Ce langage est opérationnel
uniquement sous Internet Explorer versions Windows.

7. Ressources hypertextes

Vous trouverez une présentation à jour sur
http://fr.wikipedia.org/wiki/JavaScript

Où trouver des tutoriels, didacticiels JavaScript en français ?

* une présentation en français sur selfhtml :
http://fr.selfhtml.org/javascript/index.htm
* une FAQ qui parle d'Ajax, de DOM, de feuilles de style, de
formulaires, : http://javascript.developpez.com/faq/

Existe-t-il des banques de données et exemples de JavaScripts ?
(à revoir là encore en mettant en avant les sites francophones)

* http://www.toutjavascript.com/
* http://webreference.com/js/
* http://www.javascripts.com/

Quelles sont les nouveautés offertes par JavaScript versions 1.5
à 1.7 ?

* http://developer.mozilla.org/fr/docs/JavaScript

A titre de conclusion

Cette FAQ a longtemps été maintenue par Raphael Maree, elle
l'est actuellement par Christophe Raverdy.
Sa dernière mise à jour remonte au 2 février 2007.

Si vous connaissez le principe de fonctionnement des wikis, vous
pouvez vous aussi participer à la maintenance de cette FAQ en
http://urlx.org/gnouf.info/e4cf2.

Il vous est également possible de participer à la relecture des
documents publiés par fr.usenet.reponses en passant par la
plate-forme de travail sur http://gnouf.info/mediawiki.

Pour finir, vous pouvez toujours envoyer un courrier électronique
au gestionnaire de cette FAQ si certaines informations vous
semblent devoir être mises à jour.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent vilday
Le #22089911
Christophe Raverdy a écrit :
Les anglophones consulteront avec profit une vraie FAQ en
http://www.jibbering.com/faq



Euh, parce que la version française n'est pas une *vraie* FAQ ? On peut
retirer le mot "vraie" de cette phrase ? :)
Sinon, il manquerait pas le mot "anglais" après "FAQ en ..." ?


Qu'est-ce-que JavaScript ?

Javascript un langage de script orienté objet



Sur le document on a des fois "Javascript" et d'autres "JavaScript", il
faudrait peut être toujours écrire de la même façon, non ? Je ne sais
pas trop comment l'écrire mais j'aurais tendance à écrire "Javascript".

L'essentiel étant de synchroniser le format d'écriture sur ce document,
non ?

Au coeur javascript on trouve donc la notion d'objet : à un objet
on associera deux tableaux :



Manque "de" entre "Au coeur" et "javascript".

* un tableau de propriétés (les différentes valeurs qui
définissent l'objet);
* un tableau de fonctions (méthodes) qui permettent de lire ou
modifier les propriétés.



J'avoue, j'ai rien compris là ! Pourquoi on parle de tableaux ?

Il existe des objets prédéfinis : (window, document, form,...)



Les fameux Host objects ? C'est à dire ceux non définis dans ECMAscript
3rd édition et laissés à la discretion de l'implémentation ?

"window" et "document", ok. Par contre c'est quoi l'objet prédéfini
"form" ? C'est du NS4, IE4 ? c'est quoi donc ? IE7, OP9 et FX2 ne le
connaisse pas. Si c'est pour parler de "document.forms" dans ce cas là
on est plus dans le même type d'objet, puisque c'est alors une
collection de l'objet "document" et donc il a rien a faire là, non ?

On pourrait peut être aussi y ajouter "XMLHttpRequest", non ? C'est pas
un Host object lui aussi (sauf IE6-) maintenant ?

A quoi cela sert-il ? (entre autres)



* A manipuler tous les éléments et propriétés du document (ajout,
modification et suppression de noeuds. cf DOM)

* Effectuer des vérifications dans vos formulaires avant de les
soumettre au serveur (n'autoriser l'envoi que si les champs
sont conformes à ce qui est attendu);



mouais, pourquoi pas. C'est vraiment simplifier javascript mais ok :)
Ceci dit, je pense qu'il faudrait ajouter le fait que avec js la
vérification n'est qu'une indication et que il faut de toute façon
vérifier chaque valeur côté serveur. Peut être comme ceci (suis pas très
doué en belle phrases :)
"... conformes à ce qui est attendu, mais n'omettez *jamais* de refaire
les vérifications côté serveur)"

* Proposer des utilitaires qui par exemple interdisent à des
robots de récupérer les adresses électroniques,



ah ? j'aimerais bien voir ça.

document.write(' Quelle horreur si c'est de ça dont il est question :(

Que faut-il pour débuter ?

* un accès à un tutoriel accessible avec des explications
claires et des exemples "clés en main" comme en
http://fr.selfhtml.org/javascript;
* un navigateur avec l'exécution de scripts activée;
* un éditeur de texte avec coloration syntaxique comme :

* notepad++ pour windows (via
http://www.framasoft.net/article2579.html);
* vim pour windows ou linux (via
http://www.framasoft.net/article218.html).



Je suis d'avis a faire disparaitre cette section.
Parce que :
- pas besoin de fr.selfhtml.org pour débuter javascript
- ECMAScript n'est pas limité à un navigateur
- pas besoin de la coloration syntaxique pour débuter

Existe-t-il des outils/programmes pour faciliter l'écriture de
scripts ?



Un cerveau en état de marche ?

Il existe des environnement de développement (ou "framework") qui
permettent de gérer html, css et scripts.

Pour linux, mac et windows :

* http://www.aptana.com/download_all.php



Je n'utilise pas et ne connais donc pas, mais y'a pas Eclipse aussi
qu'on pourrait mettre dans cette section ?

2. Le langage

Incorporer des scripts dans ses documents (x)html

Vous pouvez incorporer vos scripts dans la section
préférence, en indiquant l'adresse du ou des fichiers qui
contien[nen]t les scripts utiles.



Pourquoi mettre <HEAD></HEAD> en majuscule ici et en minuscule plus bas
(cf ci-dessous) ? Je suis d'avis à ne l'écrire que en minuscule, comme
ça les Xhtmleux viendront pas reprocher les majuscules :)

Ceci donnera donc :




AHHHHH. Pitié, on est sur fciwa et par conséquent écrivons du beau HTML
en mode de rendu strict et pas quirks. Pitié pour une DTD, je suis
d'avis d'utiliser la plus réaliste à mon sens c'est à dire

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
<!--



Inutile ça le <!-- c'est du vieux NS4, je suis d'avis à ce que ça dégage
de la FAQ.
Pire, c'est même dangereux en xhtml

function nom_de_la_fonction()
{
var x = 1;
var y = "";
...
}
}



Y'en une accolade en trop ici.

//-->



Donc ben si on dégage le <!-- (please, faut le virer) ben faudra aussi
dégager le //-->

</script>
</head>

Il peut y avoir plusieurs fonctions. Si les définitions sont
placées dans la section <HEAD>, elles ne risquent pas d'être
interprétées lors de la mise en forme du document. L'ajout de



Euh, j'ai pas compris la phrase disant que on va pas interprété lors de
la mise en forme parce que c'est dans l'entête du document. Rien compris
ou alors ce que j'en comprends c'est faux, mais rien compris quand même.

<dtd>
<html>
<head>
<script type="text/javascript">
var x = function()
{
alert('dans le head et pourtant interprété lors de la mise en forme');
}();
</script>
</head>
<body>
</body>
</html>

commentaires html ("<!--" et "//-->") est une sécurité
supplémentaire.



Non, l'ajout de commentaires html ("<!--" et "//-->") est un résidu du
passé qu'il faut faire disparaitre de nos habitudes d'écriture. On est
en 2007, au diable NS4.

Mais vous pouvez également les inclure dans le corps (entre les
balises <BODY> et </BODY>, *à condition* de veiller à ce que le
script définissant les fonctions soit placé avant les appels à
ces fonctions.



Ok, mais la condition exigée n'est pas spécifique au fait d'être dans le
body (définition avant appel). Cette "règle" s'applique tout autant si
le script est défini dans le head. Peut être déplacer cette exigence
dans une phrase à part, je sais pas trop. Mais comme c'est tourné
actuellement, ça me laisserai à penser que c'est une condition qui ne
s'applique que au <body>, ce qui est faux.

Invoquer les scripts depuis le document html



Euh, elle fait quoi cette phrase paumée là ?

On peut incorporer une section section


Pardon ?

On ne peut pas y définir de fonction ? Tiens je savais pas, alors je test.

...

Ben non, c'est totalement faux. Heureusement qu'on peut y définir les
fonctions qu'on veut.

Il faut enlever la phrase "On ne peut pas y définir de fonction"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function xxx()
{
alert('ben si on peut');
}
xxx();
</script>
</body>
</html>

mais on peut par contre appeler des fonctions javascript ou des
fonctions définies dans la section ce que ce soit le résultat de la fonction qui soit affiché par
le navigateur : Ce qu'affichera le navigateur pourra donc être
légèrement différent de ce que contient le document. Ainsi, on
pourrait définir une fonction rot13(paramètre) dans les entêtes
et placer un lien mailto qui se présenterait ainsi :
"mailto:<"<script

type="text/javascript">document.write(rot13("partiegauchecryptéée.tld"))</script>">



Quoi ? Quoi ?

Mais n'importe quoi. Au mieux le bout de ... /code/ ci-dessus va écrire,
mais vraiment au mieux :

"mailto:<"UNE_CHAINE">

suite du lien" : un programme qui chercherait à extraire
automatiquement aurait une information inexploitable, mais le
navigateur qui peut interpréter javascript aura une adresse
lisible et exploitable.



Et le navigateur valide (pas un robot) qui suite à une erreur sur la
page ou parce qu'il n'a pas activé javascript n'aura que l'information
inexploitable. Il n'existe qu'une seule manière de protéger un email. Ne
pas l'afficher, c'est tout. Utiliser javascript pour faire une pseudo
protection qui empêche ceux ne répondant pas au critère de passer c'est
anti accessible. Et à mon sens pas très fiable, mais bon.

Je suis d'avis de détruire tout ce paragraphe. Il ne fait que dire des
bêtises. IMO évidemment.

On peut également exploiter les événements : Pour certains



Faute d'orthographe là, "évènement" pas "événements".

objets (élément de formulaire, image,fenêtre...) on peut



Pourquoi limiter à "certains objets" ? Tous les éléments de la page
reçoivent des events, non ?

détecter des évènements suivants et appeler des scripts en
fonction de l'événement survenu. Leur intitulé est assez



re faute alors que la ligne au dessus est bonne. Saloperie d'accent, pas
pour rien que j'écris events :D

explicite, toutefois, pour plus d'informations:
http://w3c.org/TR/WD-html40/interact/scripts.html (19.1.4
intrinsic events)

onchange="x;" onclick="x;" onblur="x;"
onfocus="x;" ondblclick="x;" onkeydown="x;"
onkeypress="x;" onkeyup="x;" onmousedown="x;"
onmousemove="x;" onmouseover="x;" onmouseout="x;"
onmouseup="x;" onreset="x;" onselect="x;"
onSubmit="x;" onload="x;" onunload="x;"

x correspond soit à la suite d'instructions attendue soit au nom
du script que l'on appelle.



Je me souviens quand cette partie a été ajouté a la FAQ, cependant ce
n'est plus (toujours IMO) d'actualité puisque ça limite trop les events
possibles. Et parce que cette façon de définir l'event inline n'est pas
la seule possibilité.

D'autant que la gestion des events avec javascript peut devenir très
complexe dès lors qu'on veut maintenir des compatibilités cross-browser
et cette FAQ de fciwa n'est, à mon sens, pas dédié à l'explication
détaillée de la problématique des events.

Je pense qu'il faut supprimer cette partie de "onchange=..." à "... soit
au nom du script que l'on appelle."

Le top ce serait de faire un renvoi vers f.c.l.javascript puisque c'est
là que le détail des "events" est plus approprié à la discussion.

* Quelles sont les caractéristiques syntaxique de base ?

La syntaxe s'apparente à celle du Java, et donc du C & C++. On



Je pense qu'il faudrait remplacer la phrase par
"La syntaxe s'apparente à celle du C, C++, php, perl, etc."

Au moins dégager "Java" de la phrase ? On s'en fout de Java, rien à voir
avec javascript, inutile de placer des doutes dans la FAQ.

retrouve en tous cas des éléments communs à tous langage
impératif :

- On peut manipuler des variables scalaires, des tableaux ou des
objets;
- On peut faire des tests (if..else if...else, case)
- On peut faire des boucles (while, for)
- Il existe des objets particuliers (dates, mathématiques,...)
qui apportent des fonctions thématiques. - Les commandes sont
séparées par un point-virgule ;



Manque un saut de ligne ici juste avant "Les commandes"

Il serait possible de placer cette phrase : "Les commande sont séparées
par un point-virgule" en tout premier de la liste ? C'est pas
obligatoire le point-virgule sous certaines conditions, mais c'est pour
ma part, vivement recommandé. Donc en première position ça me semble
justifié.

- Attention au respect de la casse. Effectivement, document.robert
est différent de document.ROBERT
- La structure des fonctions est une structure de block; on
utilise { en début de fonction et } à la fin
- Le premier élément d'un tableau déclaré est l'élément 0;
ie. tab[0]



ie. ? J'ai jamais compris ce que ça voulait dire exactement et d'où ca
venait.
Par exemple ? Dans ce cas, on pourrait écrire "exemple : tab[0]", même
si je serais d'avis à enlever le "ie. tab[0]" c'est confusing à souhait.

- Pour comparer deux élements, on utilise =


et > et < et <= et >= et ===, etc.

- Pour affecter une valeur à un élément, on utilise


On pourrait écrire plutôt ceci : ?
"Le symbole d'attribution d'une valeur à un à élément est le signe égal ="

- Les opérateurs logiques: && (AND) ; || (OR) ; ! (NOT)
- Une chaîne de caractères (string) se met entre ' ou "



Est-ce qu'on peut ajouter le fait qu'il est interdit de mettre un saut
de ligne dans la chaine contrairement à php par exemple. J'ai essayé de
tourner la phrase, mais j'ai pas réussi. help qqun :D

Ce que je veux dire c'est qu'il est interdit de faire

var msg = 'ma chaine debut
ma chaine fin';

Mais qu'il faut faire

var msg = 'ma chaine debutnma chaine fin';

- // début d'un commentaire se terminant à la fin de la ligne



Est-ce qu'on peut ajouter :

- /* début de commentaire jusqu'à fin de commentaire */

Ou qqchose d'équivalent, c'est dingue j'arrive pas à trouver les mots
pour expliquer.

- Le nom d'une variable doit commencer par une lettre, mais peut
contenir des chiffres et _



euh.. Très très incomplet quand même. Je conçois l'impasse sur les
"UnicodeEscapeSequence" mais ça se limite pas à ça :

var xu345425_$ua020 = 'je suis valide';
var uaa33aussi_123 = 'lui aussi est valide';
alert(xu345425_$ua020 + ' et ' + uaa33aussi_123);

Sauf Firefox mais parce que sur ce point il ne respecte pas ce que dit
ECMA262
page 165, section A.1

IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence

IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence

Peut être transformer la phrase pour dire qu'il existe d'autres
caractères autorisés que ceux énumérés. Peut être en éludant le problème
des "UnicodeEscapeSequence" parce que j'avoue ne pas bien comprendre
l'intérêt de les autoriser mais bon, il sont définis.

"- Le nom d'une variable doit commencer par une lettre, le signe $ ou le
signe _ éventuellement suivi par une ou plusieurs lettres, chiffres, $ et _"

- Une variable déclarée avec var est une variable locale à la
fonction dans laquelle elle est déclarée. Par défaut, les
variables sont globales.

* Quelle est la structure d'une fonction ?

function nom (paramètre) { instructions; }

-La fonction est appelée via nom(paramètre)
-Si une fonction contient plusieurs paramètres, ils sont
séparés par une virgule dans la déclaration et dans l'appel de
la fonction.
-Si on veut retourner une valeur qui a été "calculée" par cette
fonction, inscrire return var; Et pour appeler la fonction qui
donnera une valeur à var: var=nom(paramètre)



Il manque une séparation là je pense

- Si on veut retourner ...., inscrire return var;
saut de ligne
- Et pour appeler la fonction qui ....

* Comment modifier la valeur d'un objet de la page ?

La syntaxe est similaire à celle des langages de programmation
orienté-objet (Delphi,...) Ainsi, soit le formulaire nommé
formulaire1 et la textarea nommée champtexte dans laquelle vous
voulez écrire Robert:

document.formulaire1.champtexte.value='Robert';



Hummm. Mauvaise pratique.

document.forms.formulaire1.elements.champtexte

ou selon le niveau de geekitude :)

document.forms['formulaire1'].elements['champtexte']

3. Quelques scripts pratiques



[snip all]

Alors là, je pense que ce paragraphe est totalement hors du propos de la
FAQ. Il finit même par aborder une nouvelle fois le concept des events
sans approfondir et ça parle même de la statusbar qu'on pourrait
manipuler sans problème... Bref je pense qu'il faut complètement
supprimer ce paragraphe, ça n'a rien à faire ici.

D'autant que les "scripts" proposés sont (1) inutiles et (2) bourrés de
fautes et/ou (3) de mauvaises pratiques.

(1) De nos jours, qui veut encore faire un rollover d'image avec du
javascript comme celui proposé ? Sérieusement, qui ? :)

SRC="image1.gif" NAME="image1"></A>

(2) Je crois pas que ça fasse grand chose d'intéressant ça. Ou encore :
Comment mal ouvrir un popup ? C'est ça hein ? :p

(3) <a href="javascript:wclose()">
var toolkit= java.awt.Toolkit.getDefaultToolkit();

Ca fait pas sérieux de lire des trucs pareils dans une FAQ javascript :(

suite au prochain épisode :)

--

laurent
Olivier Miakinen
Le #22089701
Le 17/10/2007 14:03, Laurent vilday a écrit :
[ plein d'excellentes critiques concernant la FAQ vétuste sur
le langage Java(S|s)cript ]



Laurent, tu m'as l'air plein de bonne volonté, et qui plus es tu es
sûrement l'un des mieux placés avec YD pour améliorer cette FAQ. Sache
que Christophe Raverdy a eu la gentillesse de reprendre le bébé mais
que, de son propre aveu, ce n'est pas un spécialiste. En revanche, il
a mis en place un système de type Wiki permettant à chacun de faire
les corrections :
http://gnouf.info/mediawiki/index.php?titleúQ_fr.comp.lang.javascript
et surtout :
http://gnouf.info/mediawiki/index.php?titleºS_FAQ_fr.comp.lang.javascript

Si tu avais le courage de te plonger dans les modifs de cette page, je
crois que nous t'en serions tous reconnaissants.
Laurent vilday
Le #22088981
Olivier Miakinen a écrit :
a mis en place un système de type Wiki permettant à chacun de faire
les corrections :
http://gnouf.info/mediawiki/index.php?titleúQ_fr.comp.lang.javascript
et surtout :
http://gnouf.info/mediawiki/index.php?titleºS_FAQ_fr.comp.lang.javascript

Si tu avais le courage de te plonger dans les modifs de cette page, je
crois que nous t'en serions tous reconnaissants.



J'ai, laborieusement, fait quelques modifs, mais je ne peux pas prendre
la liberté de transformer/supprimer tout ce qui ne me plait pas.

J'aurai préféré qu'on (le groupe) en discute avant, histoire d'obtenir
un consensus, parce que certains passages *me* semblent inutiles mais
sont peut être indispensables pour d'autres, je suis *très* *loin* de
tout savoir sur javascript.

Et j'aime pas les wikis, alors si je peux limiter les connections avec
cette forme étrange de document ça m'arrange :)

Et puis surtout, ma "terminologie" concernant javascript (entre autre)
n'est pas nécessairement correcte, ce qui n'est IMO pas bon à mettre
dans un document pareil. C'est pas fait pour engluer les newbies dans
mon langage approximatif :)

Sinon, concernant la discussion et donc l'évolution du document,
j'aimerai qques précisions sur certains points avant de m'y atteler
(chaque point sera précédé de la marque [*] pour les séparer).

[*] 1 objet = 2 tableaux ?
<quote>
Au coeur javascript on trouve donc la notion d'objet : à un objet on
associera deux tableaux :
* un tableau de propriétés (les différentes valeurs qui définissent
l'objet);
* un tableau de fonctions (méthodes) qui permettent de lire ou modifier
les propriétés.
</quote>

Je ne comprend pas ce qui est dit ici. C'est pour expliquer quoi ?

[*] protection antibot par js ?
<quote>
A quoi cela sert-il ?
* Proposer des utilitaires qui par exemple interdisent à des robots de
récupérer les adresses électroniques
</quote>

J'ai beau y réfléchir encore et encore, je ne vois que des inconvénients
à préconiser une protection antibot par javascript. Et pire, je n'arrive
pas vraiment à comprendre comment ça pourrait marcher. Est-ce que qqun
pourrait m'éclairer ? merci.

[*] kit de démarrage
J'en avais parlé, mais sans accord préalable du groupe sur la forme de
la modification à appliquer je ne me sens pas de le faire. Le document dit :
<quote>
Que faut-il pour débuter ?
* un accès à un tutoriel accessible avec des explications claires et des
exemples "clés en main" comme en http://fr.selfhtml.org/javascript;
* un navigateur avec l'exécution de scripts activée;
* un éditeur de texte avec coloration syntaxique comme :
* notepad++ pour windows
* vim pour windows ou linux
</quote>

Envoyer vers selfhtml.org est IMO une très mauvaise idée, les
"explications" y sont incomplètes voir de temps en temps fausses. Et les
"exemples" sont plus proches du n'importe quoi que de qqchose d'autre.

Ensuite je trouve que limiter les éditeurs de texte à notepad++ et vim
c'est tout de même beaucoup trop limité. J'aurais tendance soit à
proposer une liste un peu plus conséquente, soit à carrément les
supprimer. Dans le cas ou on veuille conserver quelques exemples
d'éditeurs de texte simple, je ne les connais évidemment pas tous, alors
qui sont-ils ? J'utilise PSPad sous windows et Quanta+ sous linux, mais
comment choisir ceux à mettre dans la "liste" ?

Je remplacerais donc le paragraphe par qqchose de plus succinct comme :

<suggestion>
Que faut-il pour débuter ?
* un navigateur avec l'exécution de scripts activée,
* un éditeur de texte avec coloration syntaxique.
</suggestion>

Mais comme je disais, sans discussion préalable il me semble délicat
d'aller chambouler tout le document.

Voila déjà pour les 2 premiers chapitres. J'ai fait quelques modifs, je
regarderais les 5 autres plus tard.

Et, euh, j'ai dit que j'aimais pas, mais pas du tout, le système des
wikis ? :D

--
laurent
Publicité
Poster une réponse
Anonyme