text: var webviewGroup = function(id, options) {
  	this.id = id;
  	this.options = options;
  	this.styles = options.styles;
  	this.items = options.items;
  	this.onChange = options.onChange
  
  	this.options.index = options.index || 0;
  
  	this.webviews = {};
  	this.webviewContexts = {};
  	this.currentWebview = false;
  	this._init();
  };
  
  var proto = webviewGroup.prototype;
  
  proto._init = function() {
  	this._initParent();
  	this._initNativeView();
  	this._initWebviewContexts(this.options.index);
  };
  proto._initParent = function() {
  	this.parent = plus.webview.getWebviewById(this.id);
  	if(!this.parent) {
  		this.parent = plus.webview.create(this.id, this.id);
  		this.parent.show('none');
  	}
  };
  proto._initNativeView = function() {
  	// fixed by wmy 因为沉浸式应用，需要额外加上状态栏高度
  	var statusbar_H = plus.navigator.getStatusbarHeight();
  	this.nativeView = new plus.nativeObj.View('__MUI_TAB_NATIVE', {
  		'top': (83 + statusbar_H) +'0px', //这个需要根据顶部导航及顶部选项卡高度自动调整
  		'height': (window.screen.height - 83)+"px",
  		'left': '100%',
  		'width': '100%',
  //		"backgroundColor":"#cdefce"
  	});
  	this.nativeView.show();
  };
  proto._initWebviewContexts = function() {
  	for(var len = this.items.length, i = len - 1; i >= 0; i--) {
  		var webviewOptions = this.items[i];
  		var id = webviewOptions.id;
  		var isFirst = i === 0;
  		var isLast = i === (len - 1);
  		var isCurrent = this.options.index === i;
  		var extras = webviewOptions.extras;
  		extras.__mui_url = webviewOptions.url;
  		extras.__mui_index = i;
  
  		extras.__mui_left = isFirst ? '' : this.items[i - 1].id;
  		extras.__mui_right = isLast ? '' : this.items[i + 1].id;
  
  		var styles = webviewOptions.styles || {};
  
  		if(i > this.options.index) {
  			styles.left = '100%';
  		} else if(i < this.options.index) {
  			styles.left = '-100%';
  		} else {
  			styles.left = '0';
  		}
  		var webviewContext = new webviewGroupContext(id, webviewOptions, this);
  		this.webviewContexts[id] = webviewContext;
  		if(isCurrent) {
  			webviewContext.webview = plus.webview.getWebviewById(id);
  			webviewContext.createWebview();
  			webviewContext.webview.show("none");
  			this._initDrags(webviewContext.webview);
  			this.currentWebview = webviewContext.webview;
  		}
  	}
  };
  proto._onChange = function(webview) {
  	this.currentWebview = webview;
  	this.onChange({
  		index: webview.__mui_index
  	});
  };
  proto._dragCallback = function(dir, fromWebview, view, viewId) {
  	if(view === this.nativeView) { //需要创建webview
  		//第一步:初始化目标webview
  		this.webviewContexts[viewId].createWebview('drag');
  		var targetWebview = this.webviewContexts[viewId].webview;
  		targetWebview.show();
  		this.nativeView.setStyle({
  			left: '100%'
  		});
  		//第二步:初始化目标webview的drag
  		this._initDrags(targetWebview);
  		this._onChange(targetWebview);
  		//第三步:校验目标webview的左右webview的drag初始化
  		this._checkDrags(targetWebview);
  	} else {
  		this._onChange(view);
  	}
  };
  
  proto._initDrag = function(webview, dir) {
  	var flag = ('__mui_drag_' + dir + '_flag');
  	if(webview[flag]) {
  		return;
  	}
  	var viewId = webview['__mui_' + (dir === 'left' ? 'right' : 'left')];
  	console.log(viewId);
  	if(viewId) {
  		var view = plus.webview.getWebviewById(viewId);
  		if(!view) { //如果目标webview不存在,使用nativeView替换
  			view = this.nativeView;
  		} else {
  			webview[flag] = true;
  		}
  		webview.drag({
  				'direction': dir,
  				'moveMode': 'followFinger'
  			}, {
  				'view': view,
  				'moveMode': 'follow'
  			},
  			function(res) {
  				if(res.type === 'end' && res.result) { //拖拽完成
  					this._dragCallback(dir, webview, view, viewId);
  				}
  			}.bind(this)
  		)
  	} else {
  		webview[flag] = true;
  	}
  };
  proto._initDrags = function(webview) {
  	this._initDrag(webview, 'left');
  	this._initDrag(webview, 'right');
  };
  proto._checkDrags = function(webview) {
  	var left = webview.__mui_left;
  	var right = webview.__mui_right;
  	if(left) {
  		var leftWebview = plus.webview.getWebviewById(left);
  		if(leftWebview && !leftWebview.__mui_drag_left_flag) {
  			this._initDrag(leftWebview, 'left');
  		}
  	}
  	if(right) {
  		var rightWebview = plus.webview.getWebviewById(right);
  		if(rightWebview && !rightWebview.__mui_drag_right_flag) {
  			this._initDrag(rightWebview, 'right');
  		}
  	}
  };
  proto.getCurrentWebview = function() {
  	return this.currentWebview;
  };
  proto.getCurrentWebviewContext = function() {
  	if(this.currentWebview) {
  		return this.webviewContexts[this.currentWebview.id];
  	}
  	return false;
  };
  proto.switchTab = function(id) {
  	id = id.replace('_0', ''); //首页需要替换为appid
  	var fromWebview = this.currentWebview;
  	if(id === fromWebview.id) {
  		return;
  	}
  	var toWebviewContext = this.webviewContexts[id];
  	var toWebview = toWebviewContext.webview;
  	var fromToLeft = '100%';
  	var toFromLeft = '-100%';
  	if(toWebviewContext.options.extras.__mui_index > fromWebview.__mui_index) {
  		fromToLeft = '-100%';
  		toFromLeft = '100%';
  	}
  	var isNew = false;
  	if(!toWebview) {
  		isNew = true;
  		toWebviewContext.createWebview('startAnimation');
  		toWebview = toWebviewContext.webview;
  		//					toWebview.showBehind(plus.webview.getSecondWebview());
  		toWebview.show();
  		this._initDrags(toWebview);
  		this._checkDrags(toWebview); //新建的时候均需校验
  	}
  	var self = this;
  //	console.log("current:" + fromWebview.id + ",to:" + fromToLeft);
  //	console.log("next:" + toWebview.id + ",from:" + toFromLeft);
  
  	plus.webview.startAnimation({
  			'view': fromWebview,
  			'styles': {
  				'fromLeft': '0',
  				'toLeft': fromToLeft
  			},
  			'action': 'show'
  		}, {
  			'view': toWebview,
  			'styles': {
  				'fromLeft': toFromLeft,
  				'toLeft': '0'
  			},
  			'action': 'show'
  		},
  		function(e) {
  //			console.log("startAnimation callback...");
  			if(e.id === toWebview.id) {
  				isNew && plus.nativeUI.showWaiting();
  				this.currentWebview = toWebview;
  				this.onChange({
  					index: toWebview.__mui_index
  				});
  			}
  		}.bind(this)
  	)
  };
  
  /**
   * @param {Object} id
   * @param {Object} webviewOptions
   */
  var webviewGroupContext = function(id, webviewOptions, groupContext) {
  	this.id = id;
  	this.url = webviewOptions.url;
  	this.options = webviewOptions;
  	this.groupContext = groupContext;
  
  	this.webview = false;
  	this.inited = false;
  };
  
  var _proto = webviewGroupContext.prototype;
  
  _proto.createWebview = function(from) {
  	var options = this.options;
  	options.styles = options.styles || {
  		top: "0px",
  		bottom: "0px",
  		render: "always"
  	};
  	options.styles.popGesture = 'none';
  	if(this.webview) {
  		this.webview.setStyle(options.styles);
  		for(var key in options.extras) {
  			this.webview[key] = options.extras[key];
  		}
  	} else {
  		options.styles.left = '100%';
  		if(from !== 'startAnimation') {
  			options.styles.left = '0';
  			plus.nativeUI.showWaiting();
  		}
  		this.webview = plus.webview.create(this.url, this.id, options.styles, options.extras);
  		//append进去，避免返回时闪屏
  		plus.webview.currentWebview().append(this.webview);
  	}
  	this._initWebview();
  	this.inited = true;
  };
  _proto._initWebview = function() {
  	var options = this.options;
  	if(!this.webview) {
  		return;
  	}
  	this.webview.addEventListener('rendering', function() {		
  		setTimeout(function() {
  			plus.nativeUI.closeWaiting();
  		}, 500);
  	});
  	if(options.pullToRefresh && options.pullToRefresh.support && support.pullToRefresh()) {
  		var callback = options.pullToRefresh.callback;
  		this.webview.setPullToRefresh(options.pullToRefresh, function() {
  			if(callback) { //如果指定了下拉回调
  				callback(this.webview);
  			} else { //下拉刷新回调，默认reload当前页面
  				var self = this;
  				var titleUpdate = function() {
  					setTimeout(function() {
  						self.webview.endPullToRefresh();
  					}.bind(this), 1000);
  					self.webview.removeEventListener('titleUpdate', titleUpdate);
  				};
  				this.webview.addEventListener('titleUpdate', titleUpdate);
  				this.webview.reload();
  			}
  		}.bind(this));
  	}
  };