• HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑


    使用

    使用还是比较简单的,直接贴代码了
    别忘了配置网络权限

    @Entry
    @Component
    struct WebPage {
      @State isAttachController: boolean = false
      @State url: string = ''
      @State title: string = ''
      @Prop controller: web_webview.WebviewController = new web_webview.WebviewController()
      // 与前端交互 对象
      jsObj = new JsObj({
        setHeaderContentCallback: (str: string) => {
          this.title = str
        }
      });
      // js 调用App方法: 需要在数组中声明,设置给 methodList:
      jsArray: string[] = ["setHeaderContent", "toLogin", "jumpToBossDetailNew", "jumpToBossDetail", "jumpToCompanyDetail", "openRenewDefaultNavPageLoad", "openRenewPageLoad", "openNewPageLoad", "openBrowser"];
    
      aboutToAppear(): void {
        this.url = (router.getParams() as RouterParams).url
        if (this.url.indexOf('?') > 0) {
          this.url = this.url + BranchUtils.appendBranchParams()
        } else {
          this.url = this.url + `?${BranchUtils.appendBranchParams()}`
        }
        web_webview.WebviewController.setWebDebuggingAccess(true);
        PreferencesUtil.getString("urlCookie").then((value) => {
          // 如果连接本地调试 一定要写完整的域名  带上http
         //web_webview.WebCookieManager.configCookieSync('http://10.1.65.120:5173/', value)
          // 设置cookie
          web_webview.WebCookieManager.configCookieSync('.sscha.com', value)
        })
        web_webview.once("webInited", () => {
    
        })
        eventBus.on(EventBusId.ID_LOGIN, () => {
          // todo
        })
      }
    
    
      build() {
        Column() {
          PubTitle({ title: this.title, isShowRightBtn: false })
          Web({ src: this.url, controller: this.controller })
            .width('100%')
            .height('100%')
            .mixedMode(MixedMode.All)
            .javaScriptAccess(true)
            .javaScriptProxy({
              object: this.jsObj,
              name: "android",
              methodList: this.jsArray,
              controller: this.controller,
            })
            .onControllerAttached(() => {
            // 官方建议是在这里设置 serAgent
              this.controller.setCustomUserAgent(this.controller.getUserAgent() + BranchUtils.appendBranch())
            })
            .onPageEnd((urlEnd) => {
              console.log("onPageEnd= " + JSON.stringify(urlEnd))
            })
        }
        .width('100%')
      }
    }
    
    
    
    export interface JSCallback {
      reqResult?: (code: string) => void;
      setHeaderContentCallback?: (msg: string) => void;
    }
    
    export class JsObj {
      callback?: JSCallback
    
      registCallBack(callback: JSCallback) {
        this.callback = callback
      }
    
      constructor(callback?: JSCallback) {
        this.callback = callback
      }
    
      // ...省略代码
    }
    

    加载网页(这个问题不难但是血坑,搞了好久才定位到问题)

    • 现象:
      Android 、Ios 都有线上App 网页都是调试好的
      鸿蒙加载有些网页加载不出来(绝大多数都加载不出来),有些能加载出来 。个人认为肯定不是ArkWeb的问题,这一块就需要跟前端调试,最后排查出的问题还真是前端的问题

    • 排查结果
      前端使用:localStorage,调用时localStorage为null,导致整个界面都加载不出来
      在这里插入图片描述
      经过前端修改,对localStorage是否为null进行判断,网页都可以正常加载出来了

    官网文档

    官网上有一个写法,不过没验证
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    Linux:今天学vim编辑器,gdb调试器,makefile项目自动化构建工具
    java毕业设计基于网络平台个人博客系统Mybatis+系统+数据库+调试部署
    多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测
    在Vue.js中,什么是mixins?它们的作用是什么?
    opencv基础篇 ——(七)边缘检测和图像锐化
    VMware搭载linux出现的bugs
    股票问题5连
    java接口
    艺术大观杂志艺术大观杂志社艺术大观编辑部2022年第20期目录
    算法入门(四):二分法的详解与扩展
  • 原文地址:https://blog.csdn.net/qq_34501274/article/details/140047976