#javascript #ios #uiwebview
#javascript #iOS #uiwebview
Вопрос:
У меня есть хорошо работающий веб-сайт HTML5 с некоторым JavaScript. Эта страница вызывается в UIWebView. Страница запускает некоторый JavaScript, чтобы проверить, находится ли iPad в портретном или альбомном режиме.
И вот в чем проблема. Не имеет значения, находится ли iPad в альбомном или портретном режиме, вызов функции:
orientationObserver.getOrientation()
всегда возвращает «портрет».
Это известная проблема, или я делаю что-то не так? Я установил представление, содержащее UIWebView, в ландшафтный режим с помощью:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft);
}
я делаю:
alert(orientationObserver.getOrientation()
в JS, и он всегда возвращает «Портрет», устройство (и, следовательно, приложение) работает в альбомной ориентации.
Ответ №1:
Вы можете указать стили CSS на основе ориентации окна просмотра: настроить браузер с body[orient="landscape"] or body[orient="portrait"]
Однако подход Apple к этой проблеме заключается в том, чтобы позволить разработчику изменять CSS на основе изменения ориентации, но не полностью предотвращать переориентацию. Я нашел аналогичный вопрос здесь.
Комментарии:
1. Дело в том, что я не могу что-то изменить в загруженном коде HTML / CSS / JS. Код генерируется другим программным обеспечением и «только» должен отображаться в UIWebView на iPad. Если я открываю HTML в Safari, все работает как по маслу.
2. Мои тесты на iPhone и iPad не показывают
body[orient="landscape"]
, что правило CSS имеет какой-либо эффект. Скорее, есть пример Джо Хьюитта ( web.archive.org/web/20100408142542/http://www.joehewitt.com /… ), который использует Javascript для установки атрибута ‘orient’, чтобы заставить этот метод работать. Подразумевается, что вы можете указывать правила CSS на основе ориентации без этого Javascript, неверно, хотя это повторяется в нескольких местах. (Возможно, раньше это работало, или, может быть, каждое из этих мест скопировало его из другого места без тестирования.)