HarmonyOS鸿蒙Next中webview的H5页面视频播放器自带全屏按钮点击后窗口大小未完全全屏

HarmonyOS鸿蒙Next中webview的H5页面视频播放器自带全屏按钮点击后窗口大小未完全全屏

webview的H5页面里有个视频播放器,自带的全屏按钮,点了窗口大小没有完全全屏。

是webview有需要配置的地方吗?

4 回复

可以使用ArkUI的媒体查询接口实现横屏,可以在web的onFullScreenEnter和onFullScreenExit回调中监听是否点击全屏的按键,在这两个回调里使用媒体查询接口实现视频横向和竖向,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onfullscreenenter9

当网页视频横向后需要在H5中设置横向宽高来适配使页面全屏,媒体查询接口只是让手机横屏。当网页视频横向后需要在H5中设置横向宽高来适配使页面全屏。ArkWeb基于chromium,支持FullScreen等w3c标准。

示例代码:

import web_webview from '@ohos.web.webview'
import mediaquery from '@ohos.mediaquery';
import window from '@ohos.window';
import common from '@ohos.app.ability.common';

@Entry
@Component
struct MediaQueryExample {
  @State color: string = '#DB7093';
  @State text: string = 'Portrait';
  @State portraitFunc:mediaquery.MediaQueryResult|void|null = null;
  handler: FullScreenExitHandler | null = null
  listener:mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)');
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  
  onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {
    if (mediaQueryResult.matches as boolean) { // 若设备为横屏状态,更改相应的页面布局
      this.color = '#FFD700';
      this.text = 'Landscape';
    } else {
      this.color = '#DB7093';
      this.text = 'Portrait';
    }
  }

  aboutToAppear() {
    // 绑定当前应用实例
    // 绑定回调函数
    this.listener.on('change', (mediaQueryResult:mediaquery.MediaQueryResult) => { this.onPortrait(mediaQueryResult) });
  }

  // 改变设备横竖屏状态函数
  private changeOrientation(isLandscape: boolean) {
    // 获取UIAbility实例的上下文信息
    let context:common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    // 调用该接口手动改变设备横竖屏状态
    window.getLastWindow(context).then((lastWindow) => {
      lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
    });
  }

  build() {
    Column() {
      Web({ src: $rawfile('t1.html'), controller: this.controller })
        .javaScriptAccess(true)
        .domStorageAccess(true)
        .onFullScreenEnter((event) => {
          console.log("onFullScreenEnter...")
          this.handler = event.handler
          this.changeOrientation(true);
        })
        .onFullScreenExit(() => {
          console.log("onFullScreenExit...")
          if (this.handler) {
            this.handler.exitFullScreen()
            this.changeOrientation(false);
          }
        })
    }
    .width('100%').height('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中webview的H5页面视频播放器自带全屏按钮点击后窗口大小未完全全屏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个方法能铺满html,但arkts组件还是没有盖住,大佬有什么方法解决吗?

在HarmonyOS鸿蒙Next中,WebView的H5页面视频播放器自带全屏按钮点击后窗口大小未完全全屏,可能是由于WebView的默认全屏行为与系统全屏模式未完全匹配。鸿蒙系统的WebView组件在处理全屏事件时,可能未正确调用系统全屏API,导致视频播放器未占据整个屏幕。可以检查WebView的全屏事件处理逻辑,确保其正确调用系统全屏功能。如果问题持续,建议查看鸿蒙系统的WebView组件文档,确认是否存在已知问题或限制。

在HarmonyOS鸿蒙Next中,WebView的H5页面视频播放器全屏按钮点击后窗口大小未完全全屏,可能是由于WebView的默认全屏实现与系统或H5页面的布局设置不匹配。建议检查以下方面:

  1. 确保WebView的布局参数正确,允许全屏显示。

  2. 检查H5页面的CSS样式,确认无限制全屏的样式。

  3. 使用WebViewClientWebChromeClient中的全屏回调方法,手动调整WebView的布局。

  4. 更新HarmonyOS SDK和WebView组件到最新版本,以获取最新的全屏支持。

通过以上步骤,应能解决全屏未完全覆盖的问题。

回到顶部