当前位置: 首页 > news >正文

鸿蒙ArkTs开发WebView问题总结

1. 加载WebView页面报错"Can not read properties of null (reading 'getltem')"

解决:

在加载webview的controller中加入.domStorageAccess(true)

 build() {
    Column() {
      Row().width('100%').height('50rpx')
      Web({ src: src, controller: this.controller })
        .javaScriptAccess(true)
        .domStorageAccess(true)
    }

  }

官方文档

文档中心

2.如何操作网页中的LocalStorage

解决:

通过操作应用侧runJavaScript()方法调用前端页面的JavaScript相关函数。

本人封装操作LocalStorage 方法

interface JsMethods {
  setStorage(key: string, value: any): Promise<void>;

  getStorage(key: string): Promise<string>
}
/**
 * webview中常用的js操作封装
 */
export class WebJsUtil implements JsMethods {
  private controller: WebviewController;

  constructor(controller: WebviewController) {
    this.controller = controller;
  }

  async setStorage(key: string, value: any): Promise<void> {
    this.controller.runJavaScript("window.localStorage.setItem('" + key + "', '" + value + "')")
  }

  async getStorage(key: string): Promise<string> {
    const res = await this.controller.runJavaScript("window.localStorage.getItem('" + key + "')")
    return res
  }
}

调用:

 build() {
    Column() {
      Row().width('100%').height('50rpx')
      Web({ src: new BaseUrl().APPOINT_LIST, controller: this.controller })
        .javaScriptAccess(true)
        .onPageBegin(async (event) => {
          const access_token = await PreferenceModel.getPreference('access_token')
          const refresh_token = await PreferenceModel.getPreference('refresh_token')
          const webJs = new WebJsUtil(this.controller)
          await webJs.setStorage('userInfo', JSON.stringify(this.userInfo))
          await webJs.setStorage('access_token', access_token)
          await webJs.setStorage('refresh_token', refresh_token)
        })
        .domStorageAccess(true)
    }

  }

注: window.localStorage.setItem('" + key + "', '" + value + "') 必须在 value 外有两个单引号 包含住

3.WebView 页面在windows模拟器无法出现滚动条滚动

解决:

亲测在Mac 的模拟器可以滚动,且真实模拟机也可以出现滚动条下拉,固为windows的模拟器bug,开发者无需理会,如必要可用 上下箭头进行页面上下滚动即可

相关文章:

  • ChatGPT学习第三周
  • SpringBoot 自定义映射规则resultMap association一对一
  • Nacos配置
  • 动态规划--(算法竞赛、蓝桥杯)--二维费用背包
  • 如何学习自然语言处理之语言模型
  • 【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024)
  • element-ui附件上传及在线查看详细总结,后续赋源码
  • StarRocks——中信建投基于StarRocks构建统一查询服务平台
  • WPF 【十月的寒流】学习笔记(1):DataGrid过滤
  • Unity将4个纹理图拼接成1个纹理
  • 类型字段定义影响WebApi传值及SqlSugar调用Select创建新对象
  • Vue3修改Element-plus语言与项目国际化
  • Kotlin:协程基础
  • 打造去中心化透明储蓄罐:Solidity智能合约的又一实践
  • FL Studio All Plugins Edition2024中文完整版Win/Mac
  • 【PyTorch模型转换和部署】
  • 【数据结构】周末作业
  • web组态(BY组态)接入流程
  • 4 局域网基础(2)
  • 11.以太网交换机工作原理
  • 从世界工厂走向全球创新中心,上海车展为何成为全球汽车行业风向标?
  • 最高法改判一起植物新品种侵权案:判赔逾5300万元破纪录
  • 巴基斯坦最近“比较烦”:遣返阿富汗人或致地区局势更加动荡
  • 拍片无小事,牙齿也有故事
  • 最高检发布知识产权检察白皮书,“知识产权检察厅”同日亮相
  • 黎巴嫩“伊斯兰集团”组织证实其高级成员在以军空袭中丧生