BridgeUtil.ets
2.66 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
import webview from '@ohos.web.webview';
import { ResourceManager } from './ResourceManager';
export class BridgeUtil {
static readonly YY_OVERRIDE_SCHEMA = "yy://";
static readonly YY_RETURN_DATA = BridgeUtil.YY_OVERRIDE_SCHEMA + "return/";
static readonly YY_FETCH_QUEUE = BridgeUtil.YY_RETURN_DATA + "_fetchQueue/";
static readonly EMPTY_STR = "";
static readonly UNDERLINE_STR = "_";
static readonly SPLIT_MARK = "/";
static readonly CALLBACK_ID_FORMAT = "JAVA_CB_%s";
static readonly JS_HANDLE_MESSAGE_FROM_JAVA = "javascript:WebViewJavascriptBridge._handleMessageFromNative('%s');";
static readonly JS_FETCH_QUEUE_FROM_JAVA = "javascript:WebViewJavascriptBridge._fetchQueue();";
static readonly JAVASCRIPT_STR = "javascript:";
// 例子 javascript:WebViewJavascriptBridge._fetchQueue(); --> _fetchQueue
static parseFunctionName(jsUrl: string): string {
return jsUrl.replace("javascript:WebViewJavascriptBridge.", "").replace("();", "");
}
static getDataFromReturnUrl(url: string): string {
if (url.startsWith(BridgeUtil.YY_FETCH_QUEUE)) {
// return = [{"responseId":"JAVA_CB_2_3957","responseData":"Javascript Says Right back aka!"}]
return url.replace(BridgeUtil.YY_FETCH_QUEUE, BridgeUtil.EMPTY_STR);
}
// temp = _fetchQueue/[{"responseId":"JAVA_CB_2_3957","responseData":"Javascript Says Right back aka!"}]
let temp = url.replace(BridgeUtil.YY_RETURN_DATA, BridgeUtil.EMPTY_STR);
let functionAndData = temp.split(BridgeUtil.SPLIT_MARK);
if (functionAndData.length < 2) {
return ""
}
let result = ""
functionAndData.forEach((value) => {
result = result + value
});
return result
}
/**
* TODO
*/
static releaseWebView() {
}
// 获取到传递信息的方法
// url = yy://return/_fetchQueue/[{"responseId":"JAVA_CB_1_360","responseData":"Javascript Says Right back aka!"}]
static getFunctionFromReturnUrl(url: string): string {
let temp = url.replace(BridgeUtil.YY_RETURN_DATA, BridgeUtil.EMPTY_STR);
let functionAndData = temp.split(BridgeUtil.SPLIT_MARK);
if (functionAndData.length >= 1) {
// functionAndData[0] = _fetchQueue
return functionAndData[0];
}
return ""
}
/**
* 这里只是加载lib包中assets中的 WebViewJavascriptBridge.js
* @param controller
* @param path 路径
*/
static webViewLoadLocalJs(context: Context, controller: webview.WebviewController) {
ResourceManager.getResourcesText(context, "WebViewJavascriptBridge.js").then((str) => {
//执行js注入
controller.runJavaScriptExt('javascript:' + str).then((msg) => {
console.log("Js注入结果:" + msg.getString());
})
})
}
}