Как обрабатывать событие onorientationchange Javascript внутри uiwebview

Кто-нибудь может помочь мне, как обрабатывать событие изменения ориентации в Javascript при посещении через uiwebview в iPhone?

Я пытаюсь зафиксировать onorientationchange событие Javascript. Я пробовал следующий код:

<style type="text/css" media="only screen and (max-device-width: 480px)">
    .portrait
    {
        width: 300px;
        padding: 0 15px 0 5px;
    }
    .landscape
    {
        width: 460px;
        padding: 0 15px 0 5px;
    }
</style>

<script type="text/javascript">
    window.onload = orientationchange;
    window.onorientationchange = orientationchange;
    function orientationchange() {
        if (window.orientation == 90
            || window.orientation == -90) {
            document.getElementById('contents').className = 'landscape';
        }
        else {
            document.getElementById('contents').className = 'portrait';
        }
    }
</script>

// and I have a div inside html

<div id="contents">
    my contents and description... e.t.c, and e.t.c...
</div>

Он отлично работает в сафари, но когда я захожу на страницу с помощью uiwebview, событие изменения ориентации не фиксируется, и моя желаемая функциональность не может быть достигнута.


person Waqas Raja    schedule 07.03.2011    source источник


Ответы (3)


Я хотел бы указать вам на это сообщение: "iphone- uiwebview-local-resources-using-javascript-and-handle-onorientationchang ", ответ непосредственно под принятым ответом отдает дань уважения вашему вопросу: обрабатывать изменения ориентации в коде приложения и вносить изменения с помощью javascript. Цитирую в надежде, что автор не будет возражать:

"Ответ на вашу вторую проблему с обработчиком onorientationchange, который не вызывается в UIWebView:

Я заметил, что свойство window.orientation не работает должным образом и обработчик window.onorientationchange не вызывается. Большинство приложений страдают этой проблемой. Это можно исправить, установив свойство window.orientation и вызвав window.onorientationchange в методе willRotateToInterfaceOrientation контроллера представления, который содержит ваш UIWebView: "

person Nick Weaver    schedule 07.03.2011
comment
Мне не нужны локальные ресурсы, я просто хочу зафиксировать событие изменения ориентации в моем HTML-коде javascript. - person Waqas Raja; 07.03.2011
comment
Я добавил цитату из сообщения, которое безуспешно пытался вам показать. На самом деле это проблема, о которой вы заявили. - person Nick Weaver; 07.03.2011
comment
да спасибо; моя проблема решена. но странно использовать html-страницы с поддержкой ориентации в приложении. - person Waqas Raja; 07.03.2011
comment
Пожалуйста. Да, так быть не должно, но это хороший способ исправить эту ошибку. - person Nick Weaver; 07.03.2011

Спасибо.

Другой способ написать это:

var onorientationchange = function()    {
    document.getElementById('contents').className =
      Math.abs(window.orientation == 90)? "landscape" : "portrait";
}
window.onload = function() {
    window.onorientationchange = window.onorientationchange
}
person Marcio    schedule 20.03.2011
comment
Выглядит неплохо, проверю позже и дам знать, работает ли. - person Waqas Raja; 20.03.2011
comment
Спасибо за ответ, но в коде есть ошибка в скобках. Вам нужен Math.abs (window.orientation) == 90, а не абс сравнения ... - person tyler; 31.10.2011

Поместите это в viewDidLoad:

[[UIDevice currentDevice]beginGeneratingDeviceOrientationNotifications];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hasOrientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

- (void)hasOrientationChanged:(NSNotification *)notification {
    UIDeviceOrientation currentOrientation; 
    currentOrientation = [[UIDevice currentDevice] orientation];
    if(currentOrientation == UIDeviceOrientationLandscapeLeft){
        NSLog(@"left");
    }

    if(currentOrientation == UIDeviceOrientationLandscapeRight){
        NSLog(@"right");
    }

}

Теперь вы можете вызывать свой веб-просмотр с правильной ориентацией :)

person stef_pe    schedule 05.12.2011
comment
да, прямо в приложении. но как я мог узнать на моей странице html? - person Waqas Raja; 05.12.2011