-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
98 lines (78 loc) · 2.23 KB
/
test.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
/**
* 测试webview
*/
importPackage(java.io)
importPackage(java.net)
importPackage(java.lang)
const _jarr = (args) => {
let type = args[0].getClass()
let len = args.length
let arr = new java.lang.reflect.Array.newInstance(type, len)
for(let i=0;i<len;i++){
arr[i] = args[i]
}
return arr
}
// 获取系统jar加载器
let _loadJar = (path) => {
let fn = new File(path)
if (!fn.exists()) {
throw new Error("file not found")
}
let urlcls = fn.toURI().toURL()
let _arr = _jarr([urlcls])
let loadcls = new URLClassLoader(_arr)
let sysloadcls = ClassLoader.getSystemClassLoader() // 系统的类加载器
let method = loadcls.getClass().getDeclaredMethod("addURL", urlcls.getClass())
if(!method.isAccessible()){
method.setAccessible(true)
}
print(urlcls)
method.invoke(sysloadcls, urlcls) // 动态加载jar
}
_loadJar('./WebView.jar')
//importClass(Packages.ca.weblite.webview.WebView) // ?? 第三方ca
importPackage(Packages.ca.weblite.webview)
//print(ca.weblite.webview.WebView)
const toHTML = (body, script) =>{
body = '<body>'+body+'</body>'
script = '<script type="application/javascript">'+script+'</script>'
let html = '<html>'+body + script+'</html>'
let data = 'data:text/html,'+ html
print(data)
return data
}
let data = toHTML('123123', 'msg_cb(123)')
let wv = new WebView()
wv.url(data)
const ConcurrentLinkedQueue = java.util.concurrent.ConcurrentLinkedQueue
const queue = new ConcurrentLinkedQueue()
// wv.addJavascriptCallback("native_cb",(msg)=>{
// Thread.sleep(1)
// //print(msg)
// // msg = JSON.parse(msg)
// //print(Date.now()-msg[0])
// // TODO wv加载完后才可以执行 函数
// if(!queue.isEmpty()){
// let v = queue.poll()
// msg !==print(msg)
// print(Thread.currentThread().getName(), v)
// wv.eval(v)
// }
// wv.eval("native_cb()")
// })
wv.addJavascriptCallback("msg_cb",function(msg){
//print('msg', msg)
})
new Thread(function(){
Thread.sleep(1000*3)
while(true){
Thread.sleep(100)
wv.dispatch({
run: () => {
wv.eval("msg_cb()")
}
})
}
}).start()
wv.show()