@@ -12,81 +12,14 @@ import platform.darwin.NSObject
1212
1313internal class DWebViewWebMessage (val webview : DWebView ) {
1414 companion object {
15-
16- const val WebMessagePortPrepareCode = """
17- const ALL_PORT = new Map();
18- let portIdAcc = 1;
19- const PORTS_ID = new WeakMap();
20- const getPortId = (port) => {
21- let port_id = PORTS_ID.get(port);
22- if (port_id === undefined) {
23- const current_port_id = portIdAcc++;
24- port_id = current_port_id;
25- ALL_PORT.set(port_id, port);
26- port.addEventListener('message', (event) => {
27- let data = event.data;
28- if (typeof data !== 'string') {
29- data = Array.from(data);
30- }
31- webkit.messageHandlers.webMessagePort.postMessage({
32- type: 'message',
33- id: current_port_id,
34- data: data,
35- ports: event.ports.map(getPortId),
36- });
37- });
38- }
39- return port_id;
40- };
41- function nativeCreateMessageChannel() {
42- const channel = new MessageChannel();
43- const port1_id = getPortId(channel.port1);
44- const port2_id = getPortId(channel.port2);
45- return [port1_id, port2_id];
46- }
47- function forceGetPort(port_id) {
48- const port = ALL_PORT.get(port_id);
49- if (port === undefined) {
50- throw new Error(`no found messagePort by ref: $\{port_id}`);
51- }
52- return port;
53- }
54- function nativePortPostMessage(port_id, data, ports_id) {
55- const origin_port = forceGetPort(port_id);
56- const transfer_ports = ports_id.map(forceGetPort);
57- if (typeof data !== "string") {
58- const u8a = new Uint8Array(data);
59- transfer_ports.push(u8a.buffer);
60- origin_port.postMessage(u8a, transfer_ports);
61- } else if(typeof data === "object") {
62- origin_port.postMessage(JSON.stringify(data), transfer_ports);
63- }
64- else {
65- origin_port.postMessage(data, transfer_ports);
66- }
67- }
68- function nativeStart(port_id) {
69- const origin_port = forceGetPort(port_id);
70- origin_port.start();
71- }
72- function nativeWindowPostMessage(data, ports_id) {
73- const ports = ports_id.map(forceGetPort);
74- dispatchEvent(new MessageEvent('message', { data, ports }));
75- }
76- function nativeClose(port_id) {
77- const origin_port = forceGetPort(port_id);
78- origin_port.close();
79- }
80- """ ;
8115 val webMessagePortContentWorld = WKContentWorld .worldWithName(" web-message-port" );
8216 val allPorts = mutableMapOf<Int , DWebMessagePort >()
83-
8417 }
8518
8619 internal class WebMessagePortMessageHandler : NSObject (), WKScriptMessageHandlerProtocol {
8720 override fun userContentController (
8821 userContentController : WKUserContentController ,
89- didReceiveScriptMessage : WKScriptMessage
22+ didReceiveScriptMessage : WKScriptMessage ,
9023 ) {
9124 try {
9225 val message = didReceiveScriptMessage.body as NSObject
0 commit comments