WebArticleEventHandler.ets
2.58 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
import { BridgeUtil, BridgeWebViewControl, Callback } from "wdJsBridge";
import { Message } from "wdJsBridge/src/main/ets/bean/Message";
import { Logger } from "wdKit";
import { H5CallNativeType } from "../pages/H5CallNativeType";
import { NativeCallH5Type } from "../pages/NativeCallH5Type";
import { WebEvents } from "./WebLocalPool";
const TAG = 'WebArticleEventHandler'
export class WebArticleEventHandler implements WebEvents {
webviewControl?: BridgeWebViewControl
pageLoadEnd: boolean = false
pageEndBlock?:(event: OnPageEndEvent) => void
currentPageOperateBlock?: (data: Message, f: Callback) => void
constructor(webviewControl: BridgeWebViewControl) {
this.webviewControl = webviewControl
}
//MARK: ----
onPrepareForReuse(): boolean {
if (!this.webviewControl || this.pageLoadEnd == false) {
return false
}
this.webviewControl?.callHandle(NativeCallH5Type.jsCall_clearAppData, '', (data) => {
})
return true
}
onPageBegin(event: OnPageBeginEvent): void {
Logger.debug(TAG, 'onPageBegin');
this.registerHandlers();
//有时序问题 必须延时执行
setTimeout(() => {
BridgeUtil.webViewLoadLocalJs(getContext(this), this.webviewControl!)
}, 200)
}
onPageEnd(event: OnPageEndEvent): void {
Logger.debug(TAG, 'onPageEnd');
this.pageLoadEnd = true
if (this.pageEndBlock) {
this.pageEndBlock(event)
}
}
onLoadIntercept(event: OnLoadInterceptEvent): boolean {
let url: string = event.data.getRequestUrl().toString()
url = url.replace("%(?![0-9a-fA-F]{2})", "%25")
.replace("\\+", "%2B");
url = decodeURIComponent(url)
Logger.debugOptimize(TAG, () => {
return 'Web onLoadIntercept url: ' + url
});
if (url.startsWith(BridgeUtil.YY_RETURN_DATA)) {
this.webviewControl?.handlerReturnData(url)
return true
}
if (url.startsWith(BridgeUtil.YY_OVERRIDE_SCHEMA)) {
// this.webviewControl.flushMessageQueue()
this.webviewControl?.receiveDataFromH5(url)
return true
}
return false;
}
private registerHandlers(): void {
// 注册h5调用js相关
for (let i = 0; i < H5CallNativeType.JsCallTypeList.length; i++) {
let handleName = H5CallNativeType.JsCallTypeList[i];
let handle = (data: Message, f: Callback) => {
Logger.debugOptimize(TAG, () => {
return 'receivedData: ' + JSON.stringify(data.data)
})
if (this.currentPageOperateBlock) {
this.currentPageOperateBlock(data, f)
}
};
this.webviewControl?.registerHandler(handleName, { handle: handle });
}
}
}