3

Значения window.screen.availHeight и window.screen.availWidth позволяют веб-приложениям знать мое фактическое разрешение экрана, а я не всегда хочу, чтобы они это знали. Могу ли я установить свои собственные значения для этих свойств? Я заинтересован в решениях для Firefox и Chrome.

1 ответ1

2

Интересный вопрос. Теоретически возможно перезаписать свойства 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .