HarmonyOS 鸿蒙Next Web组件黑屏修复方案

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

HarmonyOS 鸿蒙Next Web组件黑屏修复方案 cke_859.gif

// 导入HarmonyOS的Web视图组件
import web_webview from '@ohos.web.webview';

// 定义基础网页组件
@Component
export struct BasicWebPage {
  webController: web_webview.WebviewController = new web_webview.WebviewController();

  build() {
    Web({
      controller: this.webController,
      src: 'https://www.baidu.com',
    }).width('100%').height('100%')
  }
}

// 定义带加载遮罩的网页组件(采用延时隐藏遮罩方案)
@Component
export struct MaskedWebPage {
  webController: web_webview.WebviewController = new web_webview.WebviewController();
  @State showLoadingMask: boolean = true;

  aboutToAppear() {
    setTimeout(() => {
      this.showLoadingMask = false;
    }, 500);
  }

  build() {
    Stack() {
      Web({ controller: this.webController, src: 'https://www.baidu.com' })
        .width('100%').height('100%')
      Stack() {
        LoadingProgress().width('50%').height('50%')
      }
      .width('100%')
      .height('100%')
      .backgroundColor("#ffffff")
      .visibility(this.showLoadingMask ? Visibility.Visible : Visibility.None)
    }.width('100%').height('100%')
  }
}

// 定义智能加载遮罩的网页组件(基于可视区域变化和页面加载完成事件)
@Component
export struct SmartMaskedWebPage {
  webController: web_webview.WebviewController = new web_webview.WebviewController();
  @State showInitialLoadingMask: boolean = true
  @State isPageLoaded: boolean = false

  build() {
    Stack() {
      Web({ controller: this.webController, src: 'https://www.baidu.com' })
        .width('100%').height('100%')
        .onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) => {
          if (!this.isPageLoaded) { //首次url未加载
            this.showInitialLoadingMask = true;
          }
        })
        .onPageEnd((e) => {
          this.isPageLoaded = true
          this.showInitialLoadingMask = false
        })
      Stack() {
        LoadingProgress().width('50%').height('50%')
      }
      .width('100%')
      .height('100%')
      .backgroundColor("#ffffff")
      .visibility(this.showInitialLoadingMask ? Visibility.Visible : Visibility.None)
    }.width('100%').height('100%')
  }
}

@Entry
@Component
export struct test {
  // 控制基础网页视图显示状态
  @State isBasicWebVisible: boolean = false;

  // 控制带遮罩的网页视图显示状态(延时方案)
  @State isMaskedWebVisible: boolean = false;
  @State isMaskedWebContentVisible: boolean = false;

  // 控制智能遮罩的网页视图显示状态
  @State isSmartMaskedWebVisible: boolean = false;

  build() {
    Stack() {
      Column() {
        Button('显示基础网页(无遮罩加载)').onClick(() => {
          this.isBasicWebVisible = !this.isBasicWebVisible
        })
        Button('显示带延时隐藏遮罩的网页').onClick(() => {
          if (!this.isMaskedWebVisible) {
            this.isMaskedWebVisible = true;
            this.isMaskedWebContentVisible = true;
          } else {
            this.isMaskedWebContentVisible = false;
            setTimeout(() => {
              this.isMaskedWebVisible = false;
            }, 500);
          }
        })
        Button('最终方案,通过web组件的onVisibleAreaChange解决').onClick(() => {
          this.isSmartMaskedWebVisible = !this.isSmartMaskedWebVisible;
        })

      }.width('100%').height('100%')

      Text('测试文本')
      if (this.isBasicWebVisible) {
        BasicWebPage().width('50%').height('50%')
      }
      if (this.isMaskedWebVisible) {
        MaskedWebPage()
          .width('50%')
          .height('50%')
          .visibility(this.isMaskedWebContentVisible ? Visibility.Visible : Visibility.None)
      }
      SmartMaskedWebPage().width('50%').height('50%')
        .visibility(this.isSmartMaskedWebVisible ? Visibility.Visible : Visibility.None)
    }.width('100%').height('100%').backgroundColor("#fafafa")
  }
}

更多关于HarmonyOS 鸿蒙Next Web组件黑屏修复方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

大佬,加载的web怎么是手机模式,现在打开都是pc模式啊

更多关于HarmonyOS 鸿蒙Next Web组件黑屏修复方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


之前写这篇文章的时候用的还是API 9,web组件用真机测的。你那边真机运行起来就是打开浏览器了吗?

我也是api9 真机。不是打开浏览器,就是给了宽高了,但是网页加载出来,跟pc的浏览器打开一样,这个可以改吗,

你是指打开的页面没适配移动端对吗?那是网页自己需要写代码改的,你可以输入京东的域名,打开应该就是移动端的,是网页内通过判断当前手机的ua信息判断的。

如果你的网页在android或者ios中打开的是移端适配的,在harmony还是pc样式的,那么应该就是ua信息只判断了android/ios关键词,发现鸿蒙手机里没这样的关键词就用pc样式显示了,大概h5代码是这么写的吧。

在HarmonyOS鸿蒙Next中,Web组件黑屏问题可能由多种原因引起。以下是一些常见的修复方案:

  • 检查网络连接:确保设备网络连接正常,Web组件加载的内容需要通过网络获取。

  • 更新Web组件版本:确保使用的Web组件是最新版本,旧版本可能存在已知的兼容性问题。

  • 检查WebView配置:确认WebView的配置是否正确,包括JavaScript启用、缓存设置等。

  • 清理缓存:清理Web组件的缓存数据,避免缓存数据导致加载异常。

  • 检查HTML/CSS/JS代码:确保加载的网页代码没有错误,特别是JavaScript代码可能导致页面渲染失败。

  • 调试日志:通过日志工具查看Web组件的加载过程,定位具体问题。

  • 权限检查:确保应用具有访问网络的权限,缺少权限可能导致Web组件无法加载内容。

  • 硬件加速:尝试启用或禁用硬件加速,某些设备上硬件加速可能导致渲染问题。

  • 系统更新:确保设备系统是最新版本,系统更新可能修复了与Web组件相关的问题。

  • 重载页面:尝试重新加载页面,有时临时性的网络问题可能导致页面加载失败。

以上方案可以帮助解决HarmonyOS鸿蒙Next中Web组件黑屏的问题。

针对HarmonyOS鸿蒙Next Web组件黑屏问题,可尝试以下修复方案:

  1. 检查网络连接:确保设备网络正常,Web组件依赖网络加载内容。
  2. 更新系统:升级至最新HarmonyOS版本,修复已知Bug。
  3. 清除缓存:进入设置,清除Web组件的缓存数据。
  4. 检查代码:确保Web组件的URL和加载逻辑正确,避免空页面或错误链接。
  5. 重启设备:简单重启可能解决临时性故障。
  6. 调试日志:通过日志分析具体错误,定位问题根源。

如问题持续,建议联系华为技术支持获取进一步帮助。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!