签到天数: 53 天
[LV.5]常住居民I
352
3091
3100
管理员
非物质文化遗产社会摇传承人
之前我们已经完成了自动打开对话框我们发现对话框也有一个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跨网页通信
撒花~
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
纪念过去的猫咪币
纪念勋章
中秋佳节纪念勋章
通过论坛认证的开发者
富可敌国
论坛管理员