我正在撰写Chrome扩展程序,因此我需要能够收听YouTube网址中的更改(即,看到您切换了视频). YouTube使这很难,因为HTML5视频播放器没有完整页面重新加载,没有更改URL片段(无法监听hashchange事件
as other answers have suggested).听
pushState也不起作用.我花了很多时间在这里寻找答案,以及迄今为止我见过的所有答案(除了一个 – 我真的不想使用)不起作用.
我见过的唯一答案是设置超时以每秒运行一次以查看URL是否发生了变化(丑陋!).
编辑:The possible duplicate question是一个完全不同的问题 – 一个处理听取URL更改另一个处理扩展加载.
问题:如何在不轮询的情况下检测YouTube HTML5视频播放器中的网址更改?
解决方法
我的解决方案是简单地检查#progress元素上的transitionend事件(这是显示在顶部的红色进度条).
document.addEventListener('transitionend',function(e) { if (e.target.id === 'progress') // do stuff });
更新:
更清晰的解决方案是只监听由spfjs触发的spfdone事件,这是YouTube用来操纵推送状态的框架. Credit to Rob for the answer.
document.addEventListener('spfdone',function() { // do stuff });