有没有其他人注意到这一点?我必须创建以下回调来处理方向更改:(哎呀,编辑忘了添加)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视图中,因此无论如何都要对网页进行处理,并为它提供一种无论选择哪种方向都看起来不错的布局。