Должно ли window.screen.width/height соответствовать фактической ширине/высоте экрана?

Играя с браузером WebKit в новом Kindle 3G, я заметил, что window.screen.width и window.screen.height не отражают фактические размеры экрана. Размеры физического экрана (точнее, бумаги) 800 x 600. Я получаю:

  • 800 x 506 в ландшафтном режиме
  • 600 x 706 в портретном режиме

Но интересно, как Chrome, так и Safari (которые также являются WebKit), запущенные на моем рабочем столе, сообщают о фактическом разрешении экрана.

Согласно MDC, эти свойства не являются частью какой-либо спецификации, поэтому, вероятно, нет строгого определения того, что должна указывать ширина/высота. Но не следует ли ожидать, что они отражают фактические размеры экрана?

Ответ 1

Update:

Проблема, которую мы видим в эмуляторе с помощью window.screen.width, - это когда мы используем экраны, которые не отражают фактические пиксели устройства. Так что вы видите на экране 320 и что у устройства есть 480 или что-то еще. Однако я не понимаю, почему значение ширины экрана дает размер эмулятора на экране, а не фактические пиксели.

Это может быть проблема с устройствами? Если их плотность выше в некоторых размерах... по какой-либо причине это может привести к неправильному размеру ширины экрана?

В любом случае, прочитайте ниже для моего решения.


screen.availWidth не работает для меня при определенных размерах экрана на эмуляторе.

Единственное, что работает для меня сейчас:

window.innerWidth
window.innerHeight

Который вернет значение Viewport. В моем случае я запускаю приложение HTML5. Эти значения, по-видимому, не будут обновляться при масштабировании.

У них есть некоторые проблемы с такими размерами в Android Webkit. Вы можете увидеть разработчиков из Android говоря об этом здесь. Возможно, исправлено в сотах.

Кто-то утверждает, что он принимает некоторые размеры, как если бы была мягкая клавиатура.

Ответ 2

Казалось бы, screen.availWidth и screen.width возвращают availWidth все время на многих мобильных операционных системах.

Мне не удалось найти документацию по этому вопросу, однако я протестировал Android 2.2 и получил размер экрана за вычетом верхней строки меню, независимо от того, что запрошено.

Ответ 3

Я думаю, что WebKit ничего не может сделать, если он получает неправильные значения из системы. Конечно, эти значения должны быть представлены screen.availWidth и screen.availHeight, но я думаю, что это связано с event.screenX и event.screenY для позиций мыши (указателя).

Ответ 4

Разница заключается в том, что размер строки состояния Android и нижней панели.