как обрабатывать событие JavaScript onorientationchange внутри uiwebview - PullRequest
4 голосов
/ 07 марта 2011

Кто-нибудь может мне помочь, как обрабатывать событие изменения ориентации в 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, событие изменения ориентации не фиксируется, и желаемая функциональность не может быть достигнута.

Ответы [ 3 ]

4 голосов
/ 07 марта 2011

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

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

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

1 голос
/ 05 декабря 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");
    }

}

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

1 голос
/ 20 марта 2011

Спасибо.

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

var onorientationchange = function()    {
    document.getElementById('contents').className =
      Math.abs(window.orientation == 90)? "landscape" : "portrait";
}
window.onload = function() {
    window.onorientationchange = window.onorientationchange
}
...