Должно ли 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 и нижней панели.