Atualização para 2017
Minha resposta original foi escrita em 2009. Embora ainda funcione, eu gostaria de atualizá-la para 2017. Os navegadores ainda podem se comportar de maneira diferente. Confio na equipe do jQuery para fazer um ótimo trabalho na manutenção da consistência entre navegadores. No entanto, não é necessário incluir a biblioteca inteira. Na fonte jQuery, a parte relevante é encontrada na linha 37 de Dimensions.js . Aqui é extraído e modificado para funcionar de forma independente:
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() );
Resposta original
Como todos os navegadores se comportam de maneira diferente, primeiro você precisa testar os valores e depois usar o correto. Aqui está uma função que faz isso por você:
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;
}
}
e da mesma forma para altura:
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;
}
}
Chame esses dois em seus scripts usando getWidth()
ou getHeight()
. Se nenhuma das propriedades nativas do navegador estiver definida, ele retornará undefined
.