diff --git a/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/types/WebMessageCompatExt.ets b/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/types/WebMessageCompatExt.ets index 604f1cde5cd2789d91ce29f1cc92d743981e0e26..63e382f32d6e5cece5085619dd848e575b9f0cb7 100644 --- a/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/types/WebMessageCompatExt.ets +++ b/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/types/WebMessageCompatExt.ets @@ -33,12 +33,17 @@ export default class WebMessageCompatExt { public static fromMapWebMessageCompat(message: web_webview.WebMessageExt): WebMessageCompatExt { let data: Any + let type = 0 + // https://developer.android.com/reference/androidx/webkit/WebMessageCompat + // https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-webview-V13#webmessagetype10 + // 鸿蒙中getType()字符串类型返回1,而android中字符串返回0,为保持一致需要修改此处代码 if(message.getType() == web_webview.WebMessageType.ARRAY_BUFFER) { data = message.getArrayBuffer() + type = 1 } else { data = message.getString() } - return new WebMessageCompatExt(data, message.getType(), null); + return new WebMessageCompatExt(data, type, null); } public static fromMap(map: Map | null): WebMessageCompatExt | null { @@ -49,7 +54,7 @@ export default class WebMessageCompatExt { let type: number = map.get("type") as number let portMapList: List> = map.get("ports") as List> let ports: List | null = null; - if (portMapList != null && !portMapList.isEmpty()) { + if (portMapList != null && portMapList.length != 0) { ports = new List(); for (let i = 0; i < portMapList.length; i++) { ports.add(WebMessagePortCompatExt.fromMap(portMapList[i])); diff --git a/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/webview/web_message/WebMessageChannel.ets b/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/webview/web_message/WebMessageChannel.ets index c4bd1cc9a67e56977b73a965a232a3555739385d..b14723961c699104e4085042d92d06ef54cfa2d6 100644 --- a/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/webview/web_message/WebMessageChannel.ets +++ b/flutter_inappwebview_ohos/ohos/src/main/ets/components/plugin/webview/web_message/WebMessageChannel.ets @@ -79,7 +79,8 @@ export class WebMessageChannel implements Disposable { let webMessageChannel: WebMessageChannel = this; try { webMessagePort.onMessageEventExt((msg) => { - webMessageChannel.onMessage(index, message != null ? WebMessageCompatExt.fromMapWebMessageCompat(msg) : null) + let msgData:WebMessageCompatExt|null = WebMessageCompatExt.fromMapWebMessageCompat(msg) + webMessageChannel.onMessage(index, msgData) }) result.success(true); } catch (e) { @@ -108,14 +109,23 @@ export class WebMessageChannel implements Disposable { /// 安卓端还会传入WebMessagePortCompat[]类型,目前ohos没有 if (data != null && message.getType() == web_webview.WebMessageType.ARRAY_BUFFER) { let webMessageExt: web_webview.WebMessageExt = new web_webview.WebMessageExt() - webMessageExt.setArrayBuffer(data as ArrayBuffer) webMessageExt.setType(web_webview.WebMessageType.ARRAY_BUFFER) + webMessageExt.setArrayBuffer(data as ArrayBuffer) port.postMessageEventExt(webMessageExt); } else { - let webMessageExt: web_webview.WebMessageExt = new web_webview.WebMessageExt() - webMessageExt.setString(data != null ? data.toString() : null) - webMessageExt.setType(web_webview.WebMessageType.STRING) - port.postMessageEventExt(webMessageExt); + let messData: string = ''; + if(data != null) { + if(typeof data === 'string'){ + messData = data; + } else { + try { + messData = data.toString() + } catch(e) { + console.log(e); + } + } + } + port.postMessageEvent(messData) } result.success(true); } catch (e) {