封装注入脚本
							parent
							
								
									ba5edd93a4
								
							
						
					
					
						commit
						af29a63061
					
				
							
								
								
									
										19
									
								
								app.js
								
								
								
								
							
							
						
						
									
										19
									
								
								app.js
								
								
								
								
							|  | @ -7,25 +7,20 @@ | |||
| import 'es.shim' | ||||
| import { $, bind } from 'wkit' | ||||
| 
 | ||||
| async function test1() { | ||||
| function test1() { | ||||
|   try { | ||||
|     var result = window.webkit.messageHandlers.app.postMessage({ | ||||
|       value: 'Test 1' | ||||
|     window.webkit.messageHandlers.app.postMessage({ | ||||
|       data: { foo: 'Test 1' } | ||||
|     }) | ||||
|     $('#output').innerHTML = 'output: ' + result | ||||
|     $('#output').innerHTML = '这是没有回调的 ' | ||||
|   } catch (err) { | ||||
|     alert(err) | ||||
|   } | ||||
| } | ||||
| async function test2() { | ||||
|   let key = 'cb_' + Math.random().toString().slice(2) | ||||
| 
 | ||||
|   native.$on(key, function (v) { | ||||
|     $('#output').innerHTML = v | ||||
|   }) | ||||
|   await window.webkit.messageHandlers.app.postMessage({ | ||||
|     value: new Date(), | ||||
|     key | ||||
| function test2() { | ||||
|   native.handler('blabla', { foo: 'bar' }).then(r => { | ||||
|     $('#output').innerHTML = JSON.stringify(r) | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										32
									
								
								inject.js
								
								
								
								
							
							
						
						
									
										32
									
								
								inject.js
								
								
								
								
							|  | @ -4,6 +4,31 @@ | |||
|  * @date 2023/07/21 17:38:11 | ||||
|  */ | ||||
| 
 | ||||
| function defer() { | ||||
|   let obj = {} | ||||
|   obj.promise = new Promise((resolve, reject) => { | ||||
|     obj.resolve = resolve | ||||
|     obj.reject = reject | ||||
|   }) | ||||
|   return obj | ||||
| } | ||||
| 
 | ||||
| function rand(prefix = 'cb_') { | ||||
|   return prefix + Math.random().toString().slice(2) | ||||
| } | ||||
| 
 | ||||
| function handler(event, data = {}, once = true) { | ||||
|   let _ = defer() | ||||
|   let callback = rand() | ||||
|   native[once ? '$once' : '$on'](callback, _.resolve) | ||||
|   window.webkit.messageHandlers.app.postMessage({ | ||||
|     event, | ||||
|     data, | ||||
|     callback | ||||
|   }) | ||||
|   return _.promise | ||||
| } | ||||
| 
 | ||||
| class EventEmitter { | ||||
|   //
 | ||||
|   __events__ = Object.create(null) | ||||
|  | @ -52,3 +77,10 @@ class EventEmitter { | |||
| } | ||||
| 
 | ||||
| window.native = new EventEmitter() | ||||
| 
 | ||||
| Object.assign(native, { | ||||
|   fs: { | ||||
|     read(filepath) {} | ||||
|   }, | ||||
|   handler | ||||
| }) | ||||
|  |  | |||
							
								
								
									
										18
									
								
								main.py
								
								
								
								
							
							
						
						
									
										18
									
								
								main.py
								
								
								
								
							|  | @ -79,12 +79,20 @@ class WebKitWindow(Gtk.Window): | |||
|     data = message.get_js_value() | ||||
|     data = json.loads(data.to_json(0)) | ||||
|     print('这是py收到的值: ',data) | ||||
|     key = data.get('key') | ||||
|     event = data.get('event') | ||||
|     callback = data.get('callback') | ||||
|     res = {"foo": 123, "bar": (11,22,33)} | ||||
| 
 | ||||
|     if key : | ||||
|       scripts = 'native.$emit("' + key + '", "这是py返回的值 ' + data.get('value') + '")' | ||||
|       self.webview.evaluate_javascript(scripts, -1) | ||||
|    | ||||
|     match event: | ||||
|       case 'fs': | ||||
|         pass | ||||
| 
 | ||||
|       case _: | ||||
|         if callback : | ||||
|           scripts = 'native.$emit("' + callback + '",' + json.dumps(res) + ')' | ||||
|           print(scripts) | ||||
|           self.webview.evaluate_javascript(scripts, -1) | ||||
|        | ||||
| 
 | ||||
| 
 | ||||
|   def on_decide_policy(self, webview, decision, decision_type): | ||||
|  |  | |||
		Reference in New Issue