上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

一个视频页面,htmlDOM加载完毕,而视频没加载成功播放,

[复制链接]
  • TA的每日心情
    无聊
    2022-7-22 17:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    78

    帖子

    78

    积分

    初级工程师

    Rank: 4

    积分
    78

    猫咪币纪念章活跃会员三好学生

    发表于 2022-7-22 17:26:21 | 显示全部楼层 | 阅读模式
    1油猫币

    一个视频页面,htmlDOM加载完毕,而视频没加载成功播放,会触发onload事件吧?
    如何检测页面是否加载超时、加载不完全、页面视频加载不成功呢!

  • TA的每日心情
    无聊
    2022-7-22 17:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    78

    帖子

    78

    积分

    初级工程师

    Rank: 4

    积分
    78

    猫咪币纪念章活跃会员三好学生

    发表于 2022-7-22 17:28:18 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-7-22 17:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    78

    帖子

    78

    积分

    初级工程师

    Rank: 4

    积分
    78

    猫咪币纪念章活跃会员三好学生

    发表于 2022-7-22 17:30:23 | 显示全部楼层
    其实场景就是挂机看网课,偶尔会出现页面加载不成功或页面视频加载不成功的情况!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    23 小时前
  • 签到天数: 53 天

    [LV.5]常住居民I

    352

    主题

    3091

    帖子

    3100

    积分

    管理员

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3100

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 2022-7-22 17:46:00 | 显示全部楼层
    我个人的方案是监控视频的进度事件
    每隔20s检测一下时长是否变化
    如果变化证明还在播放
    如果没变化了证明播放完毕或者播放失败了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    12

    主题

    402

    帖子

    579

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    579

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

    发表于 2022-7-22 21:18:52 | 显示全部楼层
    我觉得这个问题可以简化为:如果到达规定的超时时间后视频仍然无法播放,那就刷新页面。这样就不用管onload,因为页面加载不成功必然会导致视频无法播放。下面的方法用到了ElementGetter(https://bbs.tampermonkey.net.cn/thread-2726-1-1.html):
    1. const elmGetter = new ElementGetter();
    2. function waitForVideoLoad(selector, timeout) {
    3.     return new Promise((resolve, reject) => {
    4.         elmGetter.get(selector, document, timeout).then(video => {
    5.             if (video) {
    6.                 if (video.duration > 0) resolve();
    7.                 video.addEventListener('canplay', resolve);
    8.             }
    9.         });
    10.         setTimeout(reject, timeout);
    11.     });
    12. }
    13. // 选择器和超时时间可根据需要修改
    14. waitForVideoLoad('video', 10000).catch(() => location.reload());
    复制代码
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表