在应用页面里嵌套了h5页面,前端页面调用应用侧函数根据日志打印调用不到
场景:
在加载的h5页面里,通过前端页面调用应用侧函数实现在h5页控制退出当前页面或跳转另一个页面等功能。在前端提供的本地环境调试是顺利的,前端页面可以成功调用应用侧函数。但改为正式环境地址后就失效了,根据日志打印是没有走到应用侧函数内的。
准备工作:
开发这个需求的时候参照了下方官方API和Demo,写法逻辑上基本一致了,就差方法名写一模一样了:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-in-page-app-function-invoking
https://developer.huawei.com/consumer/cn/forum/topic/0207150474615269010?fid=0101610563345550409
问题:
有没有大佬知道这是什么原因导致的,前端本地环境是生效的,正式环境就行不通了。现在我和前端同事都不知道这种情况如何调试去解决
关键代码:
// 声明需要注册的对象
@State jsMethod: JsCallH5Class = new JsCallH5Class(getContext(this));
private registerJavaScriptProxySucceed: boolean = false;
build() {
    Web({
          src: this.url,
          controller: this.controller,
          renderMode: RenderMode.ASYNC_RENDER // 设置渲染模式:异步渲染(RenderMode.ASYNC_RENDER),仅由Web组件构成,低功耗; 同步渲染模式(RenderMode.SYNC_RENDER)
        })
          .domStorageAccess(true) // 设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启
          .javaScriptAccess(true) //设置是否允许执行JavaScript脚本,默认允许执行。
          .databaseAccess(true) //设置是否开启数据库存储API权限,默认不开启。
          .mixedMode(MixedMode.All) // 允许HTTP和HTTPS混合内容
          .onPageEnd((event) => {
            // 重新注册 JavaScript 接口
            try {
              this.controller.registerJavaScriptProxy(this.jsMethod, "doScanPop", ["backToFinish", "openWeb"], // doScanPop唯一不变
                [] // 可选参数, asyncMethodList
              );
              this.registerJavaScriptProxySucceed = true;
              LogUtil.d(TAG, "registerJavaScriptProxy");
            } catch (error) {
              LogUtil.d(TAG, `ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
            }
          })
          .javaScriptProxy({  // 注册 JavaScript 接口
            object: this.jsMethod, // 包含原生方法的类实例
            name: "doScanPop", // H5中调用的对象名 唯一不变
            methodList: ["backToFinish", "openWeb"], // 暴露的方法列表
            controller: this.controller,
          })
    }
    
 class JsCallH5Class {
  context: Context
  constructor(context: Context) {
    this.context = context;
  }
  backToFinish(): void {
    LogUtil.d(TAG, 'H5触发原生返回')
    router.back(); // 退出当前页面
  }
  openWeb(value: string): void {
    LogUtil.d(TAG, 'JsCallJavaNewH5: ' + value);
    router.pushUrl({ url: Constants.NewWebPageToJump });
  }
}
        HarmonyOS Next
      
        赞
        
 收藏 0
 回答 1
 已解决
相关问题
 HarmonyOS 前端页面调用应用侧函数的时候获取不到 
812浏览  • 1回复 待解决
HarmonyOS  在h5前端侧调用应用侧方法 
942浏览  • 1回复 待解决
HarmonyOS  H5页面中调用系统键盘,会把页面往上顶 
1195浏览  • 1回复 待解决
自定义弹窗内加载h5页面,h5页面再跳转登陆页面,弹窗覆盖在登陆页面 
1660浏览  • 1回复 待解决
HarmonyOS 通过h5页面拉起应用或者应用市场 
1192浏览  • 1回复 待解决
ArkWeb:前端页面调用应用侧函数是同步还是异步? 
1472浏览  • 1回复 待解决
HarmonyOS 前端页面调用应用侧函数registerJavaScriptProxy没有挂载在window上 
1313浏览  • 1回复 待解决
HarmonyOS H5页面使用alert函数不生效 
1106浏览  • 1回复 待解决
HarmonyOS H5页面怎么调用原生自定义键盘 
1725浏览  • 1回复 待解决
web组件中应用侧调用前端页面函数无法传递参数 
1590浏览  • 1回复 待解决
HarmonyOS  如何查看WebView中h5页面打印的console.log日志 
1388浏览  • 1回复 待解决
h5页面怎么判断是否安装了某个应用? 
2453浏览  • 1回复 待解决
HarmonyOS  h5页面缩放问题 
2746浏览  • 2回复 待解决
HarmonyOS  前端页面调用应用侧函数javascript可运行demo(javaScriptProxy) 
1116浏览  • 1回复 待解决
HarmonyOS 页面中嵌套webView,怎么在H5页面中使用客户端接口 
1377浏览  • 1回复 待解决
#鸿蒙通关秘籍#如何通过应用侧调用前端页面的JavaScript函数? 
1251浏览  • 1回复 待解决
HarmonyOS  webview H5页面事件监听 
2144浏览  • 1回复 待解决
HarmonyOS  H5页面localstorage为null 
1395浏览  • 1回复 待解决
#鸿蒙通关秘籍#如何在前端页面调用应用侧的函数? 
1030浏览  • 1回复 待解决
前端页面调用应用侧函数时,提示参数类型不支持 
1508浏览  • 1回复 待解决
ArkTS web组件前端页面调用应用侧函数如何设置多个javaScriptProxy 
4341浏览  • 0回复 待解决
HarmonyOS Web组件前端页面调用应用侧函数,在页面关闭后再次打开无法触发的问题 
941浏览  • 1回复 待解决
HarmonyOS  在h5页面怎样判断当前环境? 
1277浏览  • 1回复 待解决
如何从浏览器H5页面打开华为应用市场应用详情页面? 
2681浏览  • 1回复 待解决
HarmonyOS H5页面加载缓存机制 
1951浏览  • 1回复 待解决





















双重注册机制冲突! 代码中同时使用了onPageEnd和.javaScriptProxy()事件内的registerJavaScriptProxy(),两种注册方式存在覆盖风险:javaScriptProxy()属于初始化阶段注册,这也是推荐使用的方法;registerJavaScriptProxy()需在Web组件初始化后调用(两种方式都需配合deleteJavaScriptRegister()清理)。
建议保留其中一种注册方式,避免重复注册导致前端页面调用应用侧函数根据日志打印调用不到。