忆往昔
忆往昔
  • 发布:2025-04-03 12:55
  • 更新:2025-04-03 16:52
  • 阅读:78

【报Bug】在harmonyos next下使用webview与浏览器交互,无法向浏览器传数据,但是可以接收到浏览器发送的数据。

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 家庭中文版 23H2

HBuilderX类型: 正式

HBuilderX版本号: 4.57

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS NEXT Developer Preview

手机厂商: 华为

手机机型: nova 13

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://static-mp-ff40e3ac-9cb8-4dc9-add1-486c5e802f30.next.bspapp.com/ywx/webview.html

示例代码:
// 发送数据到网页  
const sendDataToWeb = (data) => {  
  // 获取所有页面路由  
  const pages = getCurrentPages();  
  // 找到最后一个索引  
  const index = pages.length - 1;  
  // 获取到当前页面的webView实例  
  const currentWebview = pages[index].$getAppWebview();  
  // 取到真正的webview  
  const webView = currentWebview.children()[0];  
  webView.evalJS(`RequireMapMobile('${JSON.stringify(data)}')`);  
}  

const context = getCurrentInstance(); // 允许访问对高级使用或库创建者有用的内部组件实例  
// 接收浏览器发送的消息  
const messageHanle = (e) => {  
    console.log("浏览器发送的消息", e.detail.data[0]);  
};

操作步骤:

同样的代码,就在鸿蒙next下无法发送消息到浏览器,可以接收消息。安卓和iOS正常

预期结果:

ios、android和harmonyos next通过webview与浏览器通信

实际结果:

鸿蒙next不能发送消息到浏览器,但是可以接收消息。

bug描述:

**** 在harmonyos next下发送数据没效果,可以接收消息。android和iOS是可以的。目前是在harmonyos next 5.0.0下运行的

2025-04-03 12:55 负责人:无 分享
已邀请:
Adlaw

Adlaw

鸿蒙要用这个方法 uni.createWebviewContext('webModule', this).evalJS(function)

  • Adlaw

    uni.createWebviewContext第一个参数是web-view这个组件绑定的id

    2025-04-03 15:30

  • 忆往昔 (作者)

    回复 Adlaw: 那个是使用vue2的语法了,this。这个方法其实我也试过,也不行。请问你成功了吗,纯血鸿蒙(harmonyos next)

    2025-04-03 15:47

  • Adlaw

    回复 忆往昔: 我是vue3,这个方法一定行,我都做了好多鸿蒙项目了

    2025-04-03 15:52

  • 忆往昔 (作者)

    回复 Adlaw: uni.createWebviewContext('webview', this).evalJS(RequireMapMobile(${JSON.stringify(mapConfig)}))

    打印console.log(uni.createWebviewContext('webview', this)); 结果是{

    "evalJS": function evalJS() {},

    "evalJs": function evalJs() {},

    "back": function back() {},

    "forward": function forward() {},

    "reload": function reload() {},

    "stop": function stop() {}

    } 获取到的都感觉不对,你之前的项目可能不是harmonyos next的纯血鸿蒙

    2025-04-03 16:02

Adlaw

Adlaw

你要不信这个方法行就算了,你再找找别的方法吧

  • 忆往昔 (作者)

    大佬,我不是不信,运行起来没效果。evalJS这个函数都是空的,可以帮我分析一下么。还是说浏览器那边的代码要对应修改

    2025-04-03 16:09

Adlaw

Adlaw

你直接参考我这样写吧,如果不行的话那可能就是H5端有点问题,或者uniapp又有什么特殊bug了,不兼容你这个机型。补充一下,你要等H5页面完全加载完之后才能调用获取方法,你一进来就调用的话(比如onload)是获取不到的。

忆往昔

忆往昔 (作者)

下面是我写的代码,感觉没啥区别。就是传不过去,很难受

  • Adlaw

    你H5是怎么写的?

    2025-04-03 16:49

  • 忆往昔 (作者)

    回复 Adlaw: 可以了,谢谢。非常感谢

    2025-04-03 16:50

  • 忆往昔 (作者)

    回复 Adlaw: 其实我之前就穿进去了,但是我是用console.log打印来判断有没有接收到

    2025-04-03 16:51

  • 忆往昔 (作者)

    回复 Adlaw: uniapp运行在鸿蒙上是没打印34行的。在uniapp的控制台看不到

    2025-04-03 16:53

  • Adlaw

    回复 忆往昔: 好的

    2025-04-03 17:00

  • 忆往昔 (作者)

    回复 Adlaw: 大佬,可以再向你请教一个问题吗,就是我从一个页面跳转到含webview的页面,中间会有两秒左右的白屏

    2025-04-03 18:08

  • Adlaw

    回复 忆往昔: 这个很正常,uniapp性能很差,如果有些页面比较大那就会有白屏等待时间

    2025-04-03 18:21

忆往昔

忆往昔 (作者)

这是html的

要回复问题请先登录注册