如何通过Bookmarklet获取iframe嵌入的YouTube播放器当前播放时间
问题原因
- 你定义的
onYouTubePlayerAPIReady回调不会被触发:该函数是YouTube Iframe API加载完成时的一次性回调,如果你运行Bookmarklet时站点已经完成了API加载,后续再定义该函数不会被自动执行,因此没有任何响应 - 播放器实例初始化是异步过程:就算回调能触发,你刚执行
new YT.Player('widget2')就调用getCurrentTime(),此时播放器实例还未完成初始化,也无法拿到正确的播放时间 - 原主站可用的代码在嵌入站失效:YouTube主站的
movie_player是当前页面内的原生DOM元素,而嵌入站的YouTube播放器在跨域iframe中,父页面无法直接访问iframe内部的DOM元素,因此原逻辑不适用
修复后的代码
你提供的示例站点已经加载了YouTube Iframe API,且iframe已经开启了JS API权限,直接调用官方提供的YT.get方法即可获取对应ID的已初始化播放器实例,不需要重新创建实例,修改后的Bookmarklet代码如下:
javascript:(function(){ const ytplayer = YT.get('widget2'); const secs = ytplayer.getCurrentTime(); alert(`${secs}`); })();
内容的提问来源于stack exchange,提问作者Katherine Dudo
相关产品推荐
相关产品推荐

