有没有其他人注意到这一点?我必须创建以下回调来处理方向更改:(哎呀,编辑忘了添加)GetAndSetInitialOrientation()最初被调用,如您所见,因此以后的任何更改都基于该初始值(我拥有有条件的)。我真的很担心这不安全! window.orientation来自设备还是浏览器? I.E Honeycomb上的任何浏览器(Opera迷你海豚等)会起到相同的作用还是仅仅是本机浏览器?

function GetAndSetInitialOrientation() {
    var ori;
    if(Interface.Device.IsHoneyComb()) {
        ori = window.orientation != 0 ? "portrait" : "landscape";
    } else {
        ori = window.orientation == 0 ? "portrait" : "landscape";
    }

    Data.$html.removeClass('landscape portrait').addClass(ori);
}

$(window).bind('orientationchange', function(event) {
    HandleOrientationChange(event);
    RouteBasedOnOrientationSwitch();
});

function HandleOrientationChange(event) {
    Data.$html.removeClass('landscape portrait');
    if(Interface.Device.IsHoneyComb()) {
        Data.$html.addClass(event.orientation == 'landscape' ? 'portrait' : 'landscape');
    } else {
        Data.$html.addClass(event.orientation);
    }

    Interface.Utility.UpdateHomeLinksURLs();
}

最佳答案

“ window.orientation == 0表示肖像”的假设仅适用于基于肖像的设备。大多数平板电脑(在很大程度上映射到Honeycomb / Ice Cream Sandwich)都是基于横向的,在这种情况下,0映射到横向,ROTATE_90和ROTATE_270映射到纵向。

如果所有设备都是基于肖像的或Honeycomb(相互排斥)的,​​则您当前的代码将起作用。但是,由于存在基于肖像的蜂窝设备,并且两种类型的设备都运行“冰淇淋三明治”,因此您需要一种更好的检测方法。

一种选择是在您在父Web视图中检测到并发送到javascript的res / values-port / bools.xml和res / values-land / bools.xml中插入一个布尔值。另一种方法就是检查screen.width和screen.height,然后检查哪个更大。综上所述,最理想的情况是,由于无论如何都处于Web视图中,因此无论如何都要对网页进行处理,并为它提供一种无论选择哪种方向都看起来不错的布局。

10-08 18:19