签到天数: 194 天
[LV.7]常住居民III
720
6071
6850
管理员
非物质文化遗产社会摇传承人
之前我们已经完成了自动打开对话框我们发现对话框也有一个ifame所以我们的目标大概有这些1.实现自动播放2.播放完毕后自动关闭这节课我们先实现第一个目标我们先实现根据url分别执行不同内容
if(location.href.indexOf('/sword/rp/play/toPlay')!==-1){ InjectVideoPage() }else{ InjectButtonToBody() }
根据路径判断toplay如果存在toplay则是视频页面不是则注入刷课按钮然后我们分析我们要干什么看这个class类比较显眼,先搜一下找到了字符串拼接透这里目前并没有实际功能我们继续往下看找到了videojs初始化我们打个断点测试一下发现确实停在了这里继续往里追发现走到了initinit的里面初始化了一些基本配置,然后走到了Videos.init.call我们可以看到了里面调用了videojs之前也分析过很多源码了https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=1833https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=1859&highlight=videojs可以论坛搜一下大概四五篇了那我们抬手一个document-start加videojs劫持即可
function InjectVideoPage(){ unsafeWindow.savevideojs=undefined Object.defineProperty(unsafeWindow,'videojs',{ get(){ let result=unsafeWindow.savevideojs; return result }, set(vdobj){ vdobj.hook('beforesetup', function(videoEl, options) { options.muted=true; options.autoplay=true; return options; }); vdobj.hook('setup', function(player) { console.log('setup',player) // 绑定结束事件 player.on("ended", function() { console.log('播放完毕') }); }); unsafeWindow.savevideojs=vdobj; } }) }
直接当设置videojs的时候混入两个钩子在创建video视频对象之前设置静默播放,以及自动播放静默播放是为了防止浏览器限制导致自动播放视频失败具体参数可以查阅videojs的官方问大哥而setup钩子是在video实例创建后我们对ended事件监听,得到视频什么时候播放结束那么我们测试一下
可以看到正确打印了setup内的对象实现了静默自动播放以及播放完毕监听的功能那么下节课我们实现iframe跨网页通信
撒花~
使用道具 举报
本版积分规则 发表回复
通过论坛认证的开发者
2023年中秋纪念章
油中两岁啦~
这个荣誉的勋章是为那些为脚本猫/油猴中文网生态做出贡献的会员而设。无论是编写代码、完善文档,还是发表教程,他们都是我们生态的重要建设者。 您的每一行代码,每一段文档,都是我们社区生态的重要一砖一瓦。您的贡献,不仅促进了技术的发展,也为其他成员提供了学习和成长的平台。您是我们社区的灵魂,是我们前进的动力。感谢您的努力和付出,让我们共同创造一个更美好的脚本猫和油猴中文网。