Mise à jour pour 2017
Ma réponse originale a été rédigée en 2009. Bien qu'elle fonctionne toujours, j'aimerais la mettre à jour pour 2017. Les navigateurs peuvent encore se comporter différemment. Je fais confiance à l'équipe de jQuery pour faire un excellent travail de maintien de la cohérence inter-navigateurs. Cependant, il n'est pas nécessaire d'inclure l'ensemble de la bibliothèque. Dans le code source de jQuery, la partie concernée se trouve à l'adresse suivante ligne 37 de dimensions.js . Ici, il est extrait et modifié pour fonctionner de manière autonome :
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
Réponse originale
Comme tous les navigateurs se comportent différemment, vous devrez d'abord tester les valeurs, puis utiliser la bonne. Voici une fonction qui fait cela pour vous :
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
et de même pour la hauteur :
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
Appelez-les tous les deux dans vos scripts en utilisant getWidth()
o getHeight()
. Si aucune des propriétés natives du navigateur n'est définie, il retournera undefined
.