[FAQ] fr.comp.infosystemes.www.auteurs : JavaScript
voir@replyto.fr.invalid (Christophe Raverdy)
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=FAQ_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 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 ;
- 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.
Traduit en HTML par faq2html.pl le Wed Nov 3 05:42:13 2010 pour le site Web Usenet-FR.