forked from dcloudio/mui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmui.back.5+.js
122 lines (120 loc) · 3.24 KB
/
mui.back.5+.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* mui back 5+
* @param {type} $
* @param {type} window
* @returns {undefined}
*/
(function($, window) {
if ($.os.plus && $.os.android) {
$.addBack({
name: 'mui',
index: 5,
handle: function() {
//后续重新设计此处,将back放到各个空间内部实现
//popover
if ($.targets._popover && $.targets._popover.classList.contains($.className('active'))) {
$($.targets._popover).popover('hide');
return true;
}
//offcanvas
var offCanvas = document.querySelector($.classSelector('.off-canvas-wrap.active'));
if (offCanvas) {
$(offCanvas).offCanvas('close');
return true;
}
var previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();
if (previewImage && previewImage.isShown()) {
previewImage.close();
return true;
}
//popup
return $.closePopup();
}
});
}
/**
* 5+ back
*/
$.addBack({
name: '5+',
index: 10,
handle: function() {
if (!window.plus) {
return false;
}
var wobj = plus.webview.currentWebview();
var parent = wobj.parent();
if (parent) {
parent.evalJS('mui&&mui.back();');
} else {
wobj.canBack(function(e) {
//by chb 暂时注释,在碰到类似popover之类的锚点的时候,需多次点击才能返回;
if (e.canBack) { //webview history back
window.history.back();
} else { //webview close or hide
//fixed by fxy 此处不应该用opener判断,因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了,导致不能执行close
if (wobj.id === plus.runtime.appid) { //首页
//首页不存在opener的情况下,后退实际上应该是退出应用;
//这个交给项目具体实现,框架暂不处理;
//plus.runtime.quit();
} else { //其他页面,
if (wobj.preload) {
wobj.hide("auto");
} else {
//关闭页面时,需要将其打开的所有子页面全部关闭;
$.closeAll(wobj);
}
}
}
});
}
return true;
}
});
$.menu = function() {
var menu = document.querySelector($.classSelector('.action-menu'));
if (menu) {
$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话,找不到当前targets的问题
$.trigger(menu, 'tap');
} else { //执行父窗口的menu
if (window.plus) {
var wobj = $.currentWebview;
var parent = wobj.parent();
if (parent) { //又得evalJS
parent.evalJS('mui&&mui.menu();');
}
}
}
};
var __back = function() {
$.back();
};
var __menu = function() {
$.menu();
};
//默认监听
$.plusReady(function() {
if ($.options.keyEventBind.backbutton) {
plus.key.addEventListener('backbutton', __back, false);
}
if ($.options.keyEventBind.menubutton) {
plus.key.addEventListener('menubutton', __menu, false);
}
});
//处理按键监听事件
$.addInit({
name: 'keyEventBind',
index: 1000,
handle: function() {
$.plusReady(function() {
//如果不为true,则移除默认监听
if (!$.options.keyEventBind.backbutton) {
plus.key.removeEventListener('backbutton', __back);
}
if (!$.options.keyEventBind.menubutton) {
plus.key.removeEventListener('menubutton', __menu);
}
});
}
});
})(mui, window);