Pergunta interessante. É possível, em teoria, sobrescrever as propriedades window.screen.availHeight
e window.screen.availWidth
usando a função Object.defineProperty
.
Experimente o seguinte arquivo:
test.html :
<html>
<head>
<script>
window.alert("Window resolution before overwrite is " + window.screen.availWidth + " x " + window.screen.availHeight);
Object.defineProperty(window.screen, "availWidth", { get: function(){return 0; }});
Object.defineProperty(window.screen, "availHeight", { get: function(){return 0; }});
</script>
</head>
<body>
<script>
window.alert("Window resolution after overwrite is " + window.screen.availWidth + " x " + window.screen.availHeight);
</script>
</body>
</html>
No entanto, para responder à sua pergunta sobre uma maneira genérica de fazer isso acontecer em todos os sites, só posso fornecer uma resposta parcial.
Usando UserScripts (através do Greasemonkey) no Firefox, o seguinte script tem o efeito desejado (para usar, instale o complemento Greasemonkey, reinicie o Firefox e arraste o script para a janela do Firefox).
Hide_screen_resolution.user.js :
// ==UserScript==
// @name Hide screen resolution
// @description This script hides access to the screen resolution through window.screen.availHeight and window.screen.availWidth values.
// @include *
// @run-at document-start
// ==/UserScript==
Object.defineProperty(window.screen, "availWidth", { get: function(){return 0; }});
Object.defineProperty(window.screen, "availHeight", { get: function(){return 0; }});
Agora, se o test.html for aberto novamente, será possível ver que a resolução da tela antes da sobregravação já foi redefinida, fornecendo os resultados desejados.
Infelizmente, o Chrome não suporta a execução de código como este antes do documento ser carregado, por isso este UserScript não funciona aí. Eu publiquei esta resposta na esperança de que alguém possa sugerir uma possível solução no Chrome.