Dernière mise à jour | 5 avril 1998 | Auteur | Gilles Maire |
Serveur | http://www.imaginet.fr/ime/javascr4.htm | Adresse | Gilles.Maire@UNGI.com |
Il est possible d'ajouter l'extension javascript: comme un nom de service au sens des URL.
Ainsi <A HREF="javascript:history.go(0)">cliquer pour rafraîchir</A>
aura la même action que <A HREF="javascri4.htm">cliquer pour rafraîchir</A> sans pour autant forcer à spécifier le nom de la page.
Ceci peut être étendu à une syntaxe du type <A
HREF="javascript:history.go(-1)">cliquer pour aller à la page
précédente</A>
Il est donc possible d'appeler une fonction JavaScript par un URL de la façon suivante :
<A HREF="javascript:fonction()">appel fonction</A>
La balise MAP décrite au chapitre HTML 3.2 permet de déterminer les régions sensibles d'une image. Il est possible de positionner l'URL javascript dans cette balise comme le montre l'exemple suivant.
<MAP NAME="essai"> <AREA SHAPE="RECT" COORDS="0,0,100,100" HREF ="javascript:top.close(); window.location=page.html"> <AREA SHAPE="RECT" COORDS="101,101,200,200" HREF="essai.html" target="javascript:alert(`chargement') ; top.location=essai.html"> </MAP>
De même l'attribut ISMAP peut être accompagné d'un script avec appel de la méthode search :
<A HREF=javascript:history.go(0)><IMG SRC=france.gif BORDER=0 ISMAP></A> <SCRIPT> str = location.search if (str == "") document.write("<P>Pas de coordonnées mais si vous cliquez sur la carte ....") else { positionseparateur = str.indexOf(",") document.write("<P> x est " + str.substring(1, positionseparateur )) document.write("et y est " + str.substring(positionseparateur +1, str.length)) } </SCRIPT>
Les cookies sont explicités dans le chapitre sur les serveurs HTTP, les notions doivent être assimilées pour conprendre la suite de ce chapitre.
JavaScript permet de positionner une variable cookie, avec une date d'expiration, ou d'obtenir la valeur de cette variable. Ainsi pour positionner une variable il suffit d'utiliser la fontion setCookie comme le montre l'exemple suivant.
function setCookie(nom, valeur, expiration) { document.cookie = nom + "=" + escape(valeur) + ((expiration == null) ? "" : ("; expires=" + expiration.toGMTString())) }
de même la fonction suivante permet d'obtenir la variable en cookie
function getCookie(nom) { var recherche = nom+ "=" if (document.cookie.length > 0) { offset = document.cookie.indexOf(recherche) if (offset != -1) { // si le cookie existe offset += recherche.length // position du début fin = document.cookie.indexOf(";", offset) // position de la fin if (fin == -1) fin= document.cookie.length return unescape(document.cookie.substring(offset, fin)) } } }
Escape et unescape sont indispensable pour coder et décoder les valeurs.
Les teintes de données, ou données teintées permettent d'assurer une fonction de sécurité importante en JavaScript, cette fonctionnalité n'étant valable qu'avec Netscape 3.0. Lorsque une données est dite teintée, un script JavScript ne peut pas l'envoyer sur une autre fenêtre, quel que soit d'ailleurs le serveur qui a envoyé la fenêtre en question. Si une variable est teintée le script ne peut pas envoyer d'informations à l'extérieur de la fenêtre active.
Pour permettre de teinter des informations, une variable d'environnement est appelée NS_ENABLE_TAINT. Cette variable est globale est doit être positionnée sur le client par une variable d'environnement (sur UNIX setenv ou set; sur Windows set dans l'autoexec.bat, sur NT variable système, sur Macintosh, ressource Envi). La variable doit être mise à 1 ou ne pas exister.
On le voit le mécanisme est basé sur un acte volontaire de la part de l'utilisateur du navigateur. Et si le navigateur ne permet pas la gestion des données teintées, une fenêtre viendra avertir l'utilisateur de l'impossibilité du traitement. Ainsi le code suivant permet de tester l'état du navigateur :
if (navigator.taintEnabled()) { fonction1() } else fonction2()
Regardons les valeurs par défaut des différents objets manipulés par JavaScript.
Objet |
Propriétés teintées |
---|---|
document |
cookie, domain, forms, lastModified, links, referrer, title, URL |
Form |
action |
éléments de formulaire |
checked, defaultChecked, defaultValue, name, selectedIndex, toString, value |
history |
current, next, previous, toString |
Select |
defaultSelected, selected, text, value |
location et Link |
hash, host, hostname, href, pathname, port, protocol, search, toString |
window |
defaultStatus, status |
|
Pour teinter un élément dans un script il suffit d'utiliser la fonction taint et pour enlever la propriété d'utiliser untaint.
Exemple :
untaintedStatus=untaint(window.defaultStatus)
Un tableau contient tous les types MIME supportés par le client, aussi bien côté applications helpers que plug-ins. La syntaxe est la suivante :
navigator.mimeTypes[extension].type|description|suffixes|enabledPlugin
Le tableau suivant montre les cas possible pour le traitement de fichier GIF
Expression |
Valeur |
---|---|
navigator.mimeTypes["image/gif"].type |
image/gif |
navigator.mimeTypes["image/gif"].description |
GIF Image |
navigator.mimeTypes["image/gif"].suffixes |
gif |
navigator.mimeTypes["image/gif"].enabledPlugin |
null |
|
var typemime = navigator.mimeTypes["video/quicktime"] if (typemime) document.writeln("Cliquer <A HREF='fichier.qt'>ici</A> pour voir ") else document.writeln("quicktime n'est pas supporté")
Comme nous le voyons dans le chapitre sur la technologie Netscape One, il est possible de contrôler les plug-ins installés sur le navigateur. Nous allons étudier ici comment tout cela peut être fait en JavaScript.
Le tableau plugins cointient tous les plug-ins installés sur le navigateur. La syntaxe est la suivante :
navigator.plugins['mom du plug-in'].name|description|filename|length
Ainsi pour Live Audio le tableau suivant montre les syntaxes possibles
Expression |
Valeur |
---|---|
navigator.plugins['LiveAudio'].name |
LiveAudio |
navigator.plugins['LiveAudio'].description |
LiveAudio - Netscape Navigator sound playing component |
navigator.plugins['LiveAudio'].filename |
d:\nettools\netscape\nav30\ Program\plugins\NPAUDIO.DLL |
navigator.plugins['LiveAudio'].length |
7 |
|
Ainsi pour tester l'existance d'un plug-in Shockwave la programmation suivante sera utilisée:
var Plugin = navigator.plugins["Shockwave"] if (Plugin) document.writeln("<EMBED SRC='sequence.dir' HEIGHT=250 WIDTH=120>") else document.writeln("Shockwave n'est pas installé!")
La méthode preference associée à l'objet navigator permet au
développeur de connaître ou de positionner une préférence du
navigateur. Cette méthode a été introduite avec la version 1.2 du
langage.
Pour lire une préférence, la syntaxe suivante est utilisée :
navigator.preference(Nompreference),
la méthode retrourne alors la valeur de la préférence.
Pour positionner une préférence la syntaxe suivante est utilsiée :
navigator.preference(Nompreference,Valeurpreference)
Dans ce deuxième cas, la méthode retourne la valeur donnée à la
préférence.
Dénomination | Syntaxe | Valeur | Description |
Chargement des images | general.always_load_images | true ou false | permet de gérer le réglage du navigateur quant au chargement des images |
Autorisisation JAVA | security.enable_java | true ou false | permet de gérer le réglage du navigateur quant au chargement des applets JAVA |
Gestion des feuilles de style | browser.enable_style_sheets | true ou false | permet de gérer le réglage du navigateur quant à ses capacités de lectures des feuilles de style |
Gestion des installations automatiques | autoupdate.enabled | true ou false | permet de gérer le réglage du navigateur quant à sa capacité d'installer automatiquement ds composants |
Gestion des cookies | network.cookie.cookieBehavior | 0 si le navigateur accepte tous les cookies 1 si le navigateur accepte uniquement les cookies qui proviennent du serveur d'origine 2 si le navigateur n'accepte pas la cookies |
permet de gérer le réglage du navigateur quant à ses capacités de gestion des cookies |
Gestion des cookies | network.cookie.warnAboutCookies | true ou false | permet de gérer le réglage du navigateur quant aux messages d'alerte sur les Cookies |