initialization.js
6.04 KB
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
var firstTime = new Date()
let appH5Height = 0
var errorStatus = false
var contentId = 0
// 是否读取到了app透传的额外的信息(主要是登录信息)
var hasAppLoginExtra = false
// 是否展示了文章详情
var startShowArticle = false
// 详情数据是否获取到
var hasDetails = false
// 延长判断页面展示是否超过200ms
var pageLoadOutTime = null
// 页面加载时间是否超时
var slow = false
// 页面加载时间是否很短
var fast = false
// 模拟页面加载语法报错
var pageError = false
// userAgent
const userAgent = navigator.userAgent
// 页面加载模式
var darkMode = 'light'
// var darkMode = 'dark'
// 页面主进程进度
var mainProcessProgress = {}
/**
* @Author gx12358
* @DateTime 2024/7/31
* @lastTime 2024/7/31
* @description 时间
*/
function getTime() {
const now = new Date()
const hours = now.getHours().toString().padStart(2, '0')
const minutes = now.getMinutes().toString().padStart(2, '0')
const seconds = now.getSeconds().toString().padStart(2, '0')
const secondss = now.getMilliseconds().toString().padStart(2, '0')
return `${hours}:${minutes}:${seconds}:${secondss}`
}
console.log('页面开始加载资源:' + getTime())
function initAppDarkMode() {
darkMode = userAgent.includes('dark') ? 'dark' : darkMode
document
.querySelector('html')
.setAttribute('dark-mode', darkMode === 'dark')
}
/**
* @Author gx12358
* @DateTime 2024/7/31
* @lastTime 2024/7/31
* @description 判断页面读取到详情数据所需要时间
*/
function checkPageLoadingTimeOut() {
clearTimeout(pageLoadOutTime)
pageLoadOutTime = null
pageLoadOutTime = setTimeout(() => {
clearTimeout(pageLoadOutTime)
pageLoadOutTime = null
if (!hasDetails) {
console.log(`页面展示超过${200}毫秒`)
if (document.querySelector('.error-block').style.display === 'block') {
return
}
if (document.querySelector('.skeleton-loading').classList.contains('active')) {
document.querySelector('.skeleton-loading').classList.remove('active')
}
} else {
// console.log(`页面展示小于${time}毫秒`)
}
}, 200)
}
/**
* @Author gx12358
* @DateTime 2024/7/31
* @lastTime 2024/7/31
* @description 加载资源方法
*/
function loadFile(doc, obj = {}, fn) {
var tmpList = []
var item = null
for (
var i = 0, ci; (
ci = tmpList[i++]
);
) {
if (ci.doc === doc && ci.url == (
obj.src || obj.href
)) {
item = ci
}
}
if (item) {
if (item.ready) {
fn && fn()
} else {
item.funs.push(fn)
}
return
}
tmpList.push({
doc: doc,
url: obj.src || obj.href,
funs: [ fn ]
})
if (!doc.body) {
var html = []
for (var p in obj) {
if (p == 'tag') continue
html.push(p + '="' + obj[p] + '"')
}
doc.write(
'<' + obj.tag + ' ' + html.join(' ') + ' ></' + obj.tag + '>'
)
return
}
if (obj.id && doc.getElementById(obj.id)) {
return
}
var element = doc.createElement(obj.tag)
delete obj.tag
for (var p in obj) {
element.setAttribute(p, obj[p])
}
element.onload = element.onreadystatechange = function () {
if (!this.readyState || /loaded|complete/.test(this.readyState)) {
for (
var k = 0, ck; (
ck = tmpList[k++]
);
) {
if (ck.doc === doc && ck.url == (
obj.src || obj.href
)) {
item = ck
}
}
if (item.funs.length > 0) {
item.ready = 1
for (
var fi; (
fi = item.funs.pop()
);
) {
fi()
}
}
element.onload = element.onreadystatechange = null
}
}
element.onerror = function () {
throw Error(
'The load ' +
(
obj.href || obj.src
) +
' fails,check the url settings of file ueditor.config.js '
)
}
doc.getElementsByTagName('head')[0].appendChild(element)
}
/**
* @Author gx12358
* @DateTime 2024/7/31
* @lastTime 2024/7/31
* @description 判断设备类型
*/
function judgTerminal() {
try {
/* 返回当前的用户代理(User Agent)字符串 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' */
const u = navigator.userAgent
const isXiaomi = u.indexOf('XiaoMi') > -1 // 小米手机
const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1 // 其它安卓
const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios
const isHarmony = u.indexOf('ArkWeb') > -1 // 鸿蒙
if (isAndroid) {
return 1
} else if (isIOS) {
if (isXiaomi) {
return 1
} else {
return 2
}
}else if (isHarmony){
return 2
}
return 1
} catch (e) {
return 1
}
}
/**
* @Author gx12358
* @DateTime 2024/7/31
* @lastTime 2024/7/31
* @description 页面高度变化 - 给到app
*/
function changeContentHtmlHeight(options = {}) {
try {
if (document.querySelector(options.str || '.gx-mobile')) {
const height = document.querySelector(options.str || '.gx-mobile').getBoundingClientRect().height
if ((appH5Height !== height) || options.report) {
appH5Height = height
// console.info(`${options.str || '.gx-mobile'}`, appH5Height)
// 两种方式拿到的值是一样的
try {
sendNative(
'jsCall_currentPageOperate',
{
//当 operateType == 8,传webview的新高度给App使其更新web容器高度
operateType: '8',
webViewHeight: `${appH5Height}`
},
res => { }
)
} catch (e) {
console.info('error-html-height', e)
}
} else {
if (options.type && options.type === 'done') {
if (window.config.VUE_BASE_NODE === 'dev') {
console.log('高度', options.type || 'done', appH5Height)
}
}
}
}
} catch (e) {
// console.info('error-html-height', e)
}
}
initAppDarkMode()