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