После разговора с разработчиком Chromium, связанным с функцией dpi, кажется, что лучшее, что вы можете сделать, это:
canvas.width = Math.round(window.screen.width * window.devicePixelRatio / (window.outerWidth / window.innerWidth) / 80) * 80
canvas.height = Math.round(window.screen.height * window.devicePixelRatio / (window.outerWidth / window.innerWidth) / 60) * 60
Это работает в Chrome и Firefox.Вы можете задаться вопросом, что там делают 60 и 80 числа.Оказывается, что 60 - это общее кратное всех обычных разрешений по высоте, а 80 имеет одинаковую роль для ширины.Таким образом, мы можем использовать эти значения для исправления странных десятичных знаков, возникающих во время этих операций.
Затем, если холст находится в полноэкранном режиме, вы также можете сделать:
canvas.style.width = window.innerWidth;
canvas.style.height = window.innerHeight;
Что бы работать "почти" идеально,В моем случае я заметил, что для некоторых значений масштабирования значения canvas.style могут быть на один пиксель слишком короткими или слишком длинными.В связи с этим я рекомендую иметь body.style.overflow = 'hidden' при использовании полноэкранного режима и соответствующего цвета фона.