HarmonyOS 鸿蒙Next:web组件通过javaScriptProxy注入html页面全局方法失效,为undefined
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,死活获取不到。
楼主您好,可以看下该链接中的说明。
在应用中使用前端页面JavaScript-ArkWeb(方舟Web)-应用框架 | 华为开发者联盟 (huawei.com)
在HarmonyOS鸿蒙Next的开发环境中,遇到web组件通过javaScriptProxy
注入HTML页面全局方法失效,并显示为undefined
的问题,通常可能涉及以下几个方面的排查:
-
确保接口调用正确:首先确认
javaScriptProxy
对象的创建和接口注入方法是否按照官方文档正确实现,包括正确的接口名和方法名。 -
上下文绑定:检查
javaScriptProxy
注入时是否保持了正确的上下文(context),确保方法调用时能够正确识别到注入的全局方法。 -
权限与安全设置:确认应用的权限设置是否允许通过
javaScriptProxy
进行方法注入,以及是否有安全策略阻止了此类操作。 -
版本兼容性:检查HarmonyOS的版本是否支持你正在使用的
javaScriptProxy
特性,以及是否有已知的bug或变更影响其功能。 -
调试与日志:使用开发者工具进行调试,查看是否有错误日志输出,有助于定位问题。
如果上述步骤均确认无误,但问题依旧存在,可能涉及更底层的系统或框架问题。此时,建议直接联系官方技术支持进行深入分析。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html