Ajouter de la logique programmable aux pages Web.
JavaScript est un langage interprété.
Il est exécuté :
Des initiatives visent également à en faire un véritable langage autonome, comme CommonJS.
Sa syntaxe s'inspire de celle du langage Java (d'où son nom), mais c'est là leur seul point commun. En effet Javascript :
eval
).Il est typiquement intégré à une page HTML :
<script src="monCodeJavascript.js"></script>
script
. On place alors généralement le contenu entre ces balises dans un
commentaire, afin d'éviter qu'il soit affiché dans la page du client si son navigateur ne supporte pas cette
balise.Version | Date | Features | Commentaire |
---|---|---|---|
ES1 | en | ||
ES2 | en | Conforme à ISO/CEI 16262 | |
ES3 | en | RegExp, manipulation de chaînes de caractères, gestion des exceptions | |
ES3.1 | en | Fork de Yahoo, Microsoft, Google | |
en | Implémenté dans IE | ||
" | en | AJaX, JSON | Emergence des SPA |
" | en | V8 engine | Boost de performance |
ES5 | en | strict mode, JSON.parse/stringify ,
String .trim , map/filter/reduce/forEach array functions
|
|
ES5.1 | en | Mise à jour mineure | |
ES6/ES2015 | en | ES modules, let/const, arrow functions, class, ellipsis, default values, WeakMap, template literals | |
ES7/ES2016 | exponential operator, Observable API | ||
ES8/ES2017 | async/await |
||
ES9/ES2018 | spread operator, Promise.finally |
||
ES10/ES2019 | Array.flat/flatMap, Object.fromEntries |
||
ES11/ES2020 | |||
ES12/ES2021 | |||
ES13/ES2022 | |||
ES14/ES2023 | |||
ES15/ES2024 | |||
ES15/ES2025 |
Version | 1 | Commentaires | ||||
---|---|---|---|---|---|---|
Release | 0 | 1 | 2 | |||
Domaine | Produit | Service Pack | ||||
Navigateur Web | Netscape Navigator | 2.0 | Oui | Non | ||
3.0 | Obsolète | Oui | Non | |||
4.0 | Obsolète | Oui | ||||
MSIE | 3.0 | Oui | Non | |||
4.0 | Obsolète | Oui | Non |
Un exemple de code JavaScript est :
document.write("Hello World !");
Intégré dans une page HTML, il apparaît comme suit :
<html>
<head>
<title>Page contenant un exemple de JavaScript</title>
</head>
<body>
<p>Voici un exemple de code JavaScript:</p>
<script>
<!--
document.write('Hello World!')
-->
</script>
</body>
</html>
Version | 1 | ||||
---|---|---|---|---|---|
Release | 0 | 1 | 2 | ||
Domaine | Produit | Service Pack | |||
Navigateur Web | Netscape Navigator | 2.0 | Oui | Non | |
3.0 | Obsolète | Oui | Non | ||
4.0 | Obsolète | Oui | |||
MSIE | 3.0 | Oui | Non | ||
4.0 | Obsolète | Oui | Non |
Produit | Description | |
---|---|---|
JQuery | Généraliste | |
Node.js | Asynchrone | |
Kyuri | Implémentation de cucumber en Node.js | |
cucumis | Implémentation de cucumber en Node.js | |
GUI | jQuery mobile | |
Dojo | ||
Three.js | 3D via canvas HTML 5, WebGL ou SVG | |
Closure Tools | Bibliothèques de Google |
Comme pour tout code, il devient important de pouvoir réaliser des tests automatisés lorsque celui-ci devient conséquent. Globalement, deux approches sont proposées : tester indépendamment du navigateur (léger mais généraliste) versus tester dans le navigateur (lourd mais précis). A moins de disposer d'un code généraliste (ce qui est rare), c'est cette dernière option qu'il faudra privilégier, en veillant à pouvoir exécuter les tests sur l'ensemble des navigateurs à supporter.
Produit | Pour | Contre |
---|---|---|
JsUnit |
|
|
RhinoUnit |
|
|
crosscheck |
|
|
jsspec |
|
|
jspec |
|
|
Screw.unit |
|
|
Jasmine, Jasmine species |
|
|
Vows |
|
|
Buster.js |
|
|
TestSwarm | ||
JsTestDriver | ||
Yeti |
|
|
QUnit |
|
|
Sinon |
|
|
google-js-test |
|
|
<html>
<head>
<title>Detecteur JavaScript pour navigateur</title>
<script language="JavaScript">
<!--ver = 10; -->
</script>
<script language="JavaScript1.1">
<!-- ver = 11; -->
</script>
<script language="JavaScript1.2">
<!--ver = 12; -->
</script>
<script language="JavaScript">
<!--
function nextPage () {
// Si le navigateur est de type 4.0 on utilise latestver.html
if (navigator.userAgent.indexOf('4.0') >= 0) {
window.location = 'latestver.html'
} else if (ver >= 11) { // Sinon on regarde s'il ont JavaScript 1.1 avant d'utiliser newver.html
window.location = 'newver.html'
} else { // Par défaut on choisit oldver.html pour tous les autres.
window.location = 'oldver.html'
}
}
-->
</script>
</head>
<body>
<!-- Met oldver.html sur le lien pour les navigateurs qui n'ont pas JavaScript -->
<a href="oldver.html" onclick="nextPage(); return false;">monlien</a>
</body>
</html>
window.open("https://www.javarome.net")
La communication entre JavaScript et une applet Java est possible grâce à LiveConnect, qui est automatiquement fourni à partir de Netscape Navigator 3.0 et activé par la double activation de Java et JavaScript dans la configuration du navigateur.
Une applet ne peut accéder à JavaScript et les objets que si elle importe le package
netscape.javascript
qui définit les classes JSObject
et JSException
:
import netscape.javascript.*;
java_30
, généralement situé dans le sous-répertoire
Program\java\classes
du navigateur. Ce répertoire doit donc être ajouté au CLASSPATH
lors de la compilation de l'applet) De l'autre côté, le document HTML intégrant cette applet doit autoriser celle-ci à communiquer avec JavaScript
grâce au paramètre mayscript
du tag applet
. Par exemple :
<applet code="monApplet.class" height="100" mayscript="" width="100"></applet>
La classe Java JSObject
permet alors d'accéder aux objets JavaScript de la page, à commencer par
l'objet window, récupérable à l'aide de la fonction getWindow()
:
JSObject win = JSObject.getWindow (this);
Tout sous-objet ou propriété peut ensuite être accédé via la fonction getMember(<i>nomObjet</i>)
.
Par exemple :
JSObject doc = (JSObject) win.getMember (<span class="codeString">"document"</span>);
JSObject formulaire = (JSObject) doc.getMember (<span class="codeString">"testForm"</span>);
JSObject caseACocher = (JSObject) formulaire.getMember (<span class="codeString">"testCheck"</span>);
Boolean estCochee = (Boolean) caseACocher.getMember (<span class="codeString">"checked"</span>);
Les méthodes JavaScript, qu'elles soient utilisateur ou système, peuvent alors être appelées de deux manières
différentes. Soit via la méthode call()
de la classe JSObject
, en passant en paramètres
le nom de la méthode et un tableau de ses arguments (ne pouvant pas être null
mais pouvant contenir
une chaîne vide) :
String arguments[] = {"premierArg", "secondArg"};
win.call ("nomMethode", arguments);
Soit via la méthode eval()
de cette classe, qui reçoit en paramètre une chaîne JavaScript à
exécuter. Par exemple :
win.eval ("nomMethode(" + premierArg + "," + secondArg + ")");
Connaître le navigateur utilisé pour lire votre page
navigator.appName
donne le nom du navigateurnavigator.appVersion
donne la version du navigateurLa communication entre JavaScript et une applet Java est possible grâce à LiveConnect, qui est automatiquement fournit à partir de Netscape 3.0 et activé par la double activation de Java et JavaScript dans la configuration du navigateur.
Les packages et classes Java font alors partie pour JavaScript de l'objet Packages
. On peut alors
appeler la méthode d'une classe Java selon la syntaxe suivante :
Packages.nomPackage.nomClasse.nomMéthode(paramètres)
(A noter que les alias java
, sun
et
netscape
désignent
respectivement
Packages.java
, Packages.sun
et Packages.netscape
).
Les applets Java présentes dans un document sont alors référençables à partir de l'objet document, selon les syntaxes suivantes, au choix :
<strong>document</strong>.<i>nomApplet</i>
<strong>document.applets</strong>[<i>nomApplet</i>]<code></code>
(nomApplet
étant attribué par le paramètre name
de l'applet) <strong>document.applets</strong>[<i>indexApplet</i>]
Voici l'exemple d'une applet affichant le nombre de clics effectués sur sa surface depuis sa création (essayez donc) : Il est possible dans cet exemple pour JavaScript de communiquer avec l'applet, dans un sens (ajouter un clic à l'applet, fixer le nouveau nombre de clics de l'applet) comme dans l'autre (lire le nombre de clics de l'applet), comme le montrent les boutons suivants :
Un cookie est une chaîne de caractères de la forme :
nom=valeur;expires=dateExpiration;
document.cookie
.
L'écriture d'un cookie peut s'effectuer par...