FAQ JavaScript
FAQ JavaScriptConsultez toutes les FAQ
Nombre d'auteurs : 43, nombre de questions : 176, dernière mise à jour : 29 août 2021
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
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 :
<noscript>
Attention, le JavaScript est désactivé et vous ne pourrez bénéficier
de toutes les fonctionnalités de cette page.
</noscript>
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 :
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é.