如何在uiwebview中处理javascript onorientationchange事件

时间:2011-03-07 14:41:08

标签: iphone javascript-events uiwebview orientation

任何人都可以帮助我在iphone中通过uiwebview访问时如何处理javascript中的方向更改事件?

我正在尝试捕获javascript的onorientationchange事件。我尝试了以下代码。

<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>

它在safari中工作正常但是当我使用uiwebview访问页面时,没有捕获方向更改事件,并且无法实现我想要的功能。

3 个答案:

答案 0 :(得分:4)

我想指出this post: "iphone-uiwebview-local-resources-using-javascript-and-handling-onorientationchang",接受答案正下方的答案确实对您的问题表示敬意:处理应用程序代码中的方向更改并使用javascript注入更改。我引用希望作者不介意:

“在UIWebView中未调用onorientationchange处理程序的第二个问题的答案:

我注意到window.orientation属性无法正常工作,并且不会调用window.onorientationchange处理程序。大多数应用程序遇到此问题这可以通过设置window.orientation属性并在包含UIWebView的视图控制器的willRotateToInterfaceOrientation方法中调用window.onorientationchange来修复:“

答案 1 :(得分:1)

谢谢你。

另一种写这个的方法是:

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

答案 2 :(得分:1)

将其放入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");
    }

}

现在,您可以使用正确的方向调用您的网页视图:)