在HarmonyOS(鸿蒙)中H5页面中的视频不会自动播放

H5页面中的视频不会自动播放

问题现象

ArkWeb(方舟Web)提供了Web组件,用于在应用程序中显示Web页面内容。当应用加载完有视频内容的H5页面时,不会自动播放视频。

背景知识

  • ArkWeb提供了Web组件,Web组件为开发者提供了丰富的控制Web页面能力。
  • onPageBegin网页开始加载时触发该回调,且只在主frame触发,iframe或者frameset的内容加载时不会触发此回调。
  • runJavaScript异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
  • mediaPlayGestureAccess方法实现自动播放音视频,默认情况下,设置有声视频播放是否需要用户手动点击,静音视频播放不受该接口管控。如果需要让音视频自动播放,需要将mediaPlayGestureAccess中的参数设置为false。

问题定位

排查代码,在Web组件的onPageBegin方法中未添加对暂停和播放状态的判断,也没有调用mediaPlayGestureAccess方法,并未将参数设置为false。

ArkTS 复制代码
...
Web.create({
    controller: this.webviewController,
    src:this.url
});
Web.darkMode(WebDarkMode.Off);
Web.domStoreageAccess(true);
Web.zoomAccess(true);
Web.javaScriptAccess(true);
Web.mixedMode(MixedMode.All);
Web.cacheMode(cacheMode.None);
Web.onPageBegin(($a3)=>{
    if ($a3) {
        this.loading = false;
        this.onPageBegin($a3.url);
    }
});
...

分析结论

使用Web组件时,在onPageBegin方法中未对视频进行暂停和播放的判断,并将mediaPlayGestureAccess设置为false,导致Web页面中的视频无法自动播放。

修改建议

H5页视频不能自动播放,可以在onPageBegin方法中对视频进行暂停和播放的判断,把mediaPlayGestureAccess设置false就可以自动播放视频了。

ArkTS 复制代码
@State boo: boolean = false;


 Web({
      src: 'https://hqtime.huanqiu.com/article/4EPT4ScnmUR?app=1&ver=1&recommend_image=1&fontSize=normal&isFlat=false&recommend=1',
      controller: this.controller
    })
      .onPageBegin(() => {      
        if (this.boo) { 
        // 为false时,走else自动播放
          this.controller.runJavaScript("window.onload = function() {document.querySelector('video').addEventListener('play', function(event) {event.preventDefault();this.pause();});}")
        } else {
          this.controller.runJavaScript("window.onload = function() {document.querySelector('video').play()}")
        }  
      })
      // 默认不自动播放为true,自动播放为false
      .mediaPlayGestureAccess(this.boo)
      .layoutWeight(1)
      .mixedMode(MixedMode.All)
      .domStorageAccess(true);

背景: 由于在做项目的过程中发现web中的视频不会自动播放,就来查阅资料,发现了 mediaPlayGestureAccess (默认为true), 只用把该属性设置为 false, 就可以了

详情参考属性 mediaPlayGestureAccess

来源: H5页面中的视频不会自动播放


End

相关推荐
全堆鸿蒙2 小时前
27 RdbPredicates 条件查询详解:EqualTo、OrderBy、组合条件
华为·harmonyos·鸿蒙系统
心中有国也有家2 小时前
AtomGit Flutter 鸿蒙客户端: ChangeNotifier 模式
学习·flutter·华为·harmonyos
国服第二切图仔3 小时前
HarmonyOS APP《画伴梦工厂》开发第59篇-碰一碰精准分享——跨设备素材插入
华为·harmonyos
hqzing3 小时前
在鸿蒙 PC 上使用 Claude Code(最新的 Bun 版本)
华为·harmonyos
xd1855785554 小时前
鸿蒙AI菜谱生成器:基于ArkTS原生开发与鸿蒙PC适配实战
人工智能·华为·harmonyos·鸿蒙
GitCode官方5 小时前
开源鸿蒙跨平台直播|QRN 跨端鸿蒙一体化实战
人工智能·华为·开源·harmonyos·atomgit
ZZZMMM.zip5 小时前
演示架构师-PPT大纲生成的HarmonyOS开发实践
人工智能·华为·powerpoint·harmonyos·鸿蒙·鸿蒙系统
国服第二切图仔6 小时前
HarmonyOS APP《画伴梦工厂》开发第60篇-分布式软总线2.0——多设备协同新范式
分布式·wpf·harmonyos
2501_918582376 小时前
50 Canvas 动画:@State + @Watch + animateTo 驱动模式
华为·harmonyos·鸿蒙系统
xianjixiance_6 小时前
43 短距通信场景汇总:NFC / 二维码 / 剪贴板 / 超级终端
华为·harmonyos·鸿蒙系统