HarmonyOS 鸿蒙Next:web组件通过javaScriptProxy注入html页面全局方法失效,为undefined

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:web组件通过javaScriptProxy注入html页面全局方法失效,为undefined

1、需求

实现鸿蒙原生运用加载网页,通过javaScriptProxy方法注入对象发放,与网页进行通信,实现数据的传递。

2、实现

2.1 鸿蒙代码:

Web({
src: “http://192.168.183.1:8080/test.html”,
controller: this.webController
})
.domStorageAccess(true)
.javaScriptAccess(true)
.javaScriptProxy({
object: {
getLoginInfo: () => {
return globalThis.userInfo;
},
getToken: () => {
return globalThis.token;
},
name: “hmTransferObj”,
methodList: [“getLoginInfo”, “getToken”],
controller: this.webController
})

2.2 网页代码

if(window.hmTransferObj) {

  let token = hmTransferObj.getToken();

 console.log(token)

}

2.3 运行结果

获取不到token,js对象注入失败,为undefined;

3、预期

能够正常获取对应的值。

4、更改方案

在上述方式不能得到正常结果后,采用runJavaScript的方式运行网页全局方法,进行值的传递。

4.1 代码:

//鸿蒙
Web({
src: “http://192.168.183.1:8080/test.html”,
controller: this.webController
}).domStorageAccess(true)
.javaScriptAccess(true)
.onPageEnd(() => {
this.isComplete = true;
const params = {
token: globalThis.token
}
this.webController.runJavaScript({
script: changeData(${JSON.stringify(params)}),
callback: (result: string) => {
Logger.debug(result);
}
})
})

//网页

   window.changeData = function (params) {

      try {

        alert(params.token);

      } catch (err) {

        alert(err);

      }

    };

5、环境

api8,FA模型

6、总结

不知道方案一是不是官方的bug,死活获取不到。

2 回复

在HarmonyOS鸿蒙Next的开发环境中,遇到web组件通过javaScriptProxy注入HTML页面全局方法失效,并显示为undefined的问题,通常可能涉及以下几个方面的排查:

  1. 确保接口调用正确:首先确认javaScriptProxy对象的创建和接口注入方法是否按照官方文档正确实现,包括正确的接口名和方法名。

  2. 上下文绑定:检查javaScriptProxy注入时是否保持了正确的上下文(context),确保方法调用时能够正确识别到注入的全局方法。

  3. 权限与安全设置:确认应用的权限设置是否允许通过javaScriptProxy进行方法注入,以及是否有安全策略阻止了此类操作。

  4. 版本兼容性:检查HarmonyOS的版本是否支持你正在使用的javaScriptProxy特性,以及是否有已知的bug或变更影响其功能。

  5. 调试与日志:使用开发者工具进行调试,查看是否有错误日志输出,有助于定位问题。

如果上述步骤均确认无误,但问题依旧存在,可能涉及更底层的系统或框架问题。此时,建议直接联系官方技术支持进行深入分析。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部