Как на Android узнать реальное разрешение экрана/окна браузера из JS? Как на Android задать элементу размер в реальных пикселях?

Товарищ делает некое внутреннее корпоративное web-приложение под заранее известные модели смартфонов с заранее известными разрешениями экранов. По ходу выполнения работ заметили, что браузерное разрешение не совпадает с реальным разрешением экрана.

Была сделана тестовая web-страничка со следующим кодом:

const dataEl = document.querySelector('.data');
const data = {};

update();

window.addEventListener('resize', update);
document.documentElement.addEventListener('resize', update);
document.body.addEventListener('resize', update);

function update() {
  Object.assign(data, {
    htmlClientWidth: document.documentElement.clientWidth,
    htmlClientHeight: document.documentElement.clientHeight,
    bodyClientWidth: document.body.clientWidth,
    bodyClientHeight: document.body.clientHeight,
    bodyPageWidth: document.body.pageWidth,
    bodyPageHeight: document.body.pageHeight,
    screenWidth: screen.width,
    screenHeight: screen.height,
    screenAvailWidth: screen.availWidth,
    screenAvailHeight: screen.availHeight,
    windowInnerWidth: window.innerWidth,
    windowInnerHeight: window.innerHeight,
    windowOuterWidth: window.outerWidth,
    windowOuterHeight: window.outerHeight,
    windowDevicePixelRatio: window.devicePixelRatio
  });
  dataEl.innerHTML = JSON.stringify(data, null, 2);
}
html,
body,
.data {
  width: 100vw;
  height: 100vh;
  margin: 0;
  padding: 0;
}

.box {
  position: fixed;
  width: 500px;
  height: 500px;
  right: 0;
  bottom: 0;
  background: blue;
}
<html>

<head>
  <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
</head>

<body>
  <pre class="data">
      
    </pre>
  <div class='box'></div>
</body>

</html>

А отображается она примерно так:

Разрешение экрана

По файлу скриншота должно быть видно (если хостинг не сожмёт картинку), что разрешение экрана 1080х2160.

Значения параметров также видны на скриншоте. Блок, которому заданы широта и высота по 500px, на скриншоте имеет размер в 960 пикселей.

Собственно, вопрос, что это за браузерная самодеятельность? Существуют ли нормальные браузеры и эмуляторы web-view, которые отображают всякие векторные изображения, которые делались специально для отображения разной мелко-пиксельной информации без всякого попадания ровных горизонтальных и вертикальных линий в между-пиксельные пространства?


Ответы (0 шт):