FAQ JavaScriptConsultez toutes les FAQ
Nombre d'auteurs : 43, nombre de questions : 176, dernière mise à jour : 19 décembre 2013
Un problème fréquent avec le JavaScript c'est que son comportement n'est pas le
même sur tous les navigateurs. Certaines fonctions n'existent que sur certains
navigateurs, certaines fonctions ont même des comportements différents.
Le script suivant permet la détection de la plupart des navigateurs actuels :
var
agt=
navigator.
userAgent.
toLowerCase
();
var
is_opera =
(agt.
indexOf
("
opera
"
) !
=
-
1
);
var
is_mac =
(agt.
indexOf
("
mac
"
)!
=
-
1
);
var
is_konq =
(agt.
indexOf
('
konqueror
'
) !
=
-
1
);
var
is_safari =
((agt.
indexOf
('
safari
'
)!
=
-
1
)
&
&
(agt.
indexOf
('
mac
'
)!
=
-
1
))?
true
:
false
;
var
is_khtml =
(is_safari |
|
is_konq);
var
is_gecko =
((!
is_khtml) &
&
(navigator.
product) &
&
(navigator.
product.
toLowerCase
()=
=
"
gecko
"
))?
true
:
false
;
var
is_fb =
((agt.
indexOf
('
mozilla/5
'
)!
=
-
1
) &
&
(agt.
indexOf
('
spoofer
'
)=
=
-
1
) &
&
(agt.
indexOf
('
compatible
'
)=
=
-
1
) &
&
(agt.
indexOf
('
opera
'
)=
=
-
1
) &
&
(agt.
indexOf
('
webtv
'
)=
=
-
1
) &
&
(agt.
indexOf
('
hotjava
'
)=
=
-
1
) &
&
(is_gecko) &
&
(navigator.
vendor=
=
"
Firebird
"
));
var
is_fx =
((agt.
indexOf
('
mozilla/5
'
)!
=
-
1
) &
&
(agt.
indexOf
('
spoofer
'
)=
=
-
1
) &
&
(agt.
indexOf
('
compatible
'
)=
=
-
1
) &
&
(agt.
indexOf
('
opera
'
)=
=
-
1
) &
&
(agt.
indexOf
('
webtv
'
)=
=
-
1
) &
&
(agt.
indexOf
('
hotjava
'
)=
=
-
1
) &
&
(is_gecko) &
&
((navigator.
vendor=
=
"
Firefox
"
)|
|
(agt.
indexOf
('
firefox
'
)!
=
-
1
)));
var
is_moz =
((agt.
indexOf
('
mozilla/5
'
)!
=
-
1
) &
&
(agt.
indexOf
('
spoofer
'
)=
=
-
1
) &
&
(agt.
indexOf
('
compatible
'
)=
=
-
1
) &
&
(agt.
indexOf
('
opera
'
)=
=
-
1
) &
&
(agt.
indexOf
('
webtv
'
)=
=
-
1
) &
&
(agt.
indexOf
('
hotjava
'
)=
=
-
1
) &
&
(is_gecko) &
&
(!
is_fb) &
&
(!
is_fx) &
&
((navigator.
vendor=
=
"
"
)|
|
(navigator.
vendor=
=
"
Mozilla
"
)|
|
(navigator.
vendor=
=
"
Debian
"
)));
var
is_nav =
((agt.
indexOf
('
mozilla
'
)!
=
-
1
) &
&
(agt.
indexOf
('
spoofer
'
)=
=
-
1
)
&
&
(agt.
indexOf
('
compatible
'
) =
=
-
1
) &
&
(agt.
indexOf
('
opera
'
)=
=
-
1
)
&
&
(agt.
indexOf
('
webtv
'
)=
=
-
1
) &
&
(agt.
indexOf
('
hotjava
'
)=
=
-
1
)
&
&
(!
is_khtml) &
&
(!
(is_moz)) &
&
(!
is_fb) &
&
(!
is_fx));
var
is_ie =
((agt.
indexOf
('
msie
'
) !
=
-
1
) &
&
(!
is_opera) &
&
(!
is_khtml));
Il suffit ensuite de tester la valeur de is_*
Une technique
aujourd'hui plus utilisée est celle dite d'
Feature Detection
qui se
concentre sur une fonction plutôt que sur le navigateur.
En JavaScript, il y a l'objet history qui permet de gérer l'historique du navigateur.
Pour aller à la page précédente :
- history.back();
- history.go(-1);
Pour aller la page suivante :
- history.next();
Ce n'est pas possible…
On peut toujours essayer de le bloquer en ouvrant des fenêtres avec window.open.
Le bouton précédent sera grisé, mais on pourra toujours revenir en arrière quoi
qu'il en soit.
Il n'est pas possible de récupérer ces événements en JavaScript.
Pour accéder à une URL, pour faire une redirection par exemple, il suffit de faire :
window.
location.
replace
('
page.html
'
);
Si l'on souhaite que la page actuelle n'apparaisse pas dans l'historique.
window.
location.
assign
('
page.html
'
);
Si l'on souhaite que la page actuelle apparaisse dans l'historique.
Ce code ne fonctionne que sous Internet Explorer
La fonction qui permet la copie :
function
copyclipboard
(intext) {
window.
clipboardData.
setData
('
Text
'
,
intext);
}
Le lien qui permet la copie :
<
a href=
"
javascript:copyclipboard('Texte
à
copier');
"
>
lien<
/
a>
Il faut pour cela utiliser les propriétés "screen" suivantes :
- height pour la hauteur
- width pour la largeur
Entre les balises <head></head> :
hauteur =
screen.
height;
largeur=
screen.
width;
resol =
largeur+
"
x
"
+
hauteur;
alert
(resol);
window.
defaultStatus =
'
texte
que
vous
voulez
'
;
Attention, ce code ne fonctionne pas avec IE !
On ne peut pas.
En revanche, il y a toujours une solution de rechange.
Mettre un calque contenant une image par dessus le bouton, mais bon...
<
a
href
=
"
lien1
.
html
"
onclick
=
"
window
.
open
(
'
lien2
.
html
'
,
'
ma_fenetre
'
,
'
copyhistory
=
0
'
)
"
target
=
"
_self
"
>
cliquez ici<
/
a
>
C'est tout simple :
on ne peut pas !!!
Toutes les méthodes existant actuellement sont de vagues artifices qui n'ont aucun effet sur le fond du problème.
Pour identifier la langue par défaut du navigateur, il y a deux propriétés selon que vous ayez NetScape (Mozilla,...) ou Internet Explorer
Pour IE :
navigator.
userLanguage
Pour NS :
navigator.
language
Ce code permet de récupérer des paramètres passés dans une url par le biais d'un lien ou par la méthode get
<
script type=
"
text/javascript
"
>
var
nom=
[
]
;
var
valeur=
[
]
;
//
On
enlève
le
?
param =
window.
location.
search.
slice
(1
,
window.
location.
search.
length);
//
On
sépare
le
paramètres....
//
first[0]
est
de
la
forme
param=valeur
first =
param.
split
("
&
"
);
for
(i=
0
;
i<
first.
length;
i+
+
){
second =
first[
i]
.
split
("
=
"
);
nom[
i]
=
second[
0
]
;
valeur[
i]
=
second[
1
]
;
}
<
/
script>
Le tableau nom contient le nom des paramètres et le tableau valeur contient les valeurs de ces paramètres.
1. Créer un cookie
function
SetCookie
(name,
value,
days) {
var
expire =
new
Date
();
expire.
setTime (expire.
getTime
() +
(24
*
60
*
60
*
1000
) *
days);
document.
cookie =
name +
"
=
"
+
escape
(value) +
"
;
expires=
"
+
expire.
toGMTString
();
}
2. Récupérer la valeur d'un cookie
function
GetCookie
(name) {
var
startIndex =
document.
cookie.
indexOf
(name);
if
(startIndex !
=
-
1
) {
var
endIndex =
document.
cookie.
indexOf
("
;
"
,
startIndex);
if
(endIndex =
=
-
1
) endIndex =
document.
cookie.
length;
return
unescape
(document.
cookie.
substring
(startIndex+
name.
length+
1
,
endIndex));
}
else
{
return
null
;
}
}
3. Supprimer un cookie
function
DeleteCookie
(name) {
var
expire =
new
Date
();
expire.
setTime (expire.
getTime
() -
(24
*
60
*
60
*
1000
));
document.
cookie =
name +
"
=;
expires=
"
+
expire.
toGMTString
();
}
document.
lastModified
C'est très simple, on ne peut pas.
C'est l'utilisateur qui a le choix de ce qu'il veut imprimer, en particulier au niveau des pieds de pages / en-têtes de pages, nombre de copies, orientation des pages, impression des images et couleurs de fonds, ...
Firefox est très clair sur ce point et aucune action n'est possible par JavaScript (en dehors du style de la page, bien entendu). Sur IE, il reste la possibilité d'utiliser certains ActiveX pour paramétrer l'impression, mais cette solution est à éviter autant que possible.
Dans une pop-up, sous Firefox, même avec status=no, la barre de statut apparait, pourquoi ?
Simplement, parce que d'après la doc développeur de Mozilla :
status :
Si cette option est mise à yes, alors la nouvelle fenêtre aura une barre de statut.
L'utilisateur peut forcer l'affichage de la barre de statut.
La configuration par défaut est de forcer la présence de la barre de statut.
Par défaut, l'utilisateur force la présence de la barre de statut. Ce comportement peut être modifié dans le menu Options>Contenu>Javascript Avancé mais seul l'utilisateur peut le décider.
Il n'y a malheureusement pas grand chose à faire dans ce cas. La meilleure façon de faire est d'utiliser les balises HTML :
La façon normale de faire est d'utiliser une balise <meta />, mais cela peut être difficile à cause des différents navigateurs et du besoin de configuration du serveur.
Voici une petite astuce, indépendante du navigateur, basée sur le fait que si l'on envoie un paramètre dans l'adresse, le navigateur repasse par le serveur.
Il suffit donc de générer un paramètre aléatoire que l'on accole à l'adresse en question.
Par exemple, pour forcer la mise à jour d'une image :
MonImage.
src=
'
fichierImage.jpg?
'
+
new
Date
()*
Math
.
random
();
En JavaScript c'est impossible. Il est (a été) possible d'accéder aux fichiers sur le disque dur d'un utilisateur avec IE en utilisant des activeX, mais "normalement" ce n'est plus possible car ça représentait une faille de sécurité.