Значения window.screen.availHeight
и window.screen.availWidth
позволяют веб-приложениям знать мое фактическое разрешение экрана, а я не всегда хочу, чтобы они это знали. Могу ли я установить свои собственные значения для этих свойств? Я заинтересован в решениях для Firefox и Chrome.
1 ответ
Интересный вопрос. Теоретически возможно перезаписать свойства window.screen.availHeight
и window.screen.availWidth
с помощью функции Object.defineProperty
.
Попробуйте следующий файл:
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>
Однако, чтобы ответить на ваш вопрос о том, как это сделать на всех сайтах, я могу дать только частичный ответ.
Используя UserScripts (через Greasemonkey) в Firefox, следующий скрипт дает желаемый эффект (чтобы использовать, установите надстройку Greasemonkey, затем перезапустите Firefox и перетащите скрипт в окно 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; }});
Теперь, если test.html открывается снова, можно увидеть, что разрешение экрана перед перезаписью уже сброшено, обеспечивая желаемые результаты.
К сожалению, Chrome не поддерживает выполнение кода, подобного этому, до загрузки документа, поэтому этот пользовательский сценарий там не работает. Я разместил этот ответ в надежде, что кто-то может намекнуть на возможное решение в Chrome.