Неккоректная ширина на телефоне в веб браузере (JS)

При загрузки окна js вычисляет ширину окна, после чего устанавливает ширину canvas в два раза больше.
На десктопе всё работает ровно так, как я и ожидал:Результат на десктопе

Однако на телефоне я получил неожиданный результат: Результат на телефоне

Возможно, это связано с какими-то ограничениям на ширину в мобильных веб браузерах, однако мне так и не удалось решить эту проблему. Попытки установить свойства max-width в body/canvas ни к чему не привели.

window.onload = () => {
  canvas = document.getElementById("myCanvas");
  ctx = canvas.getContext('2d');


  canvas.width = window.innerWidth * 2;
  canvas.height = window.innerHeight;

  console.log("Canvas width: " + canvas.width);
  console.log("Window width: " + window.innerWidth);
}
body {
  margin: 0;
}

canvas {
  overflow-x: visiable;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="style.css">
  <title>Игра</title>
</head>

<body id>
  <canvas id="myCanvas"></canvas>
</body>
<script src="script.js"></script>

</html>


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

Автор решения: Xsizeonit

Проблема решена.

Как я понял, в мобильной версии веб браузера js получает ширину окна ещё до того, как само окно было полностью загружено. Хотя это странно, ведь скрипт начинает работать только лишь после загрузки окна.

Так или иначе. Моё решение заключается в постоянном получении значений ширины (и высоты) окна в цикле рисования:

function draw() {
  canvas.width = window.innerWidth * 2;
  canvas.height = window.innerHeight;
  ...
}

... 

setInterval(draw, 200);

Ну или через использование requestAnimationFrame, но это уже другая история.

→ Ссылка