我确实只是复制并粘贴了来自YouTube开发者页面的iframe嵌入式YouTube播放器API参考代码(来自"使用入门"标题下方).唯一的区别是,当状态改变时我添加了一个警报,因为我认为我在onPlayerStateChange函数中做错了.
你可以在http://jsfiddle.net/jesMv/看到jsFiddle .
如上所述,它只是YouTube开发人员页面中添加的代码的精确副本
alert('State Changed')
Run Code Online (Sandbox Code Playgroud)
作为在onPlayerStateChange函数中触发的第一件事.
然而,没有任何事情发生......无论我如何看待这个以及我改变了什么,我都无法让onStateChange做任何事情.
我该如何解决这个问题?
我正在尝试使用Youtube的iframe API构建Chrome扩展程序以显示Youtube视频.但是,玩家的OnReady事件永远不会发生.从以前的帖子我收集这是因为Youtube无法访问播放器,因为它是本地实例.
我想知道:有没有办法让这项工作?
我的代码在弹出窗口中实例化播放器.我想通过将视频ID传递给播放器的loadVideoById函数来向播放器播放新视频.这是我的播放器的代码(在名为'youtube.js'的文件中):
function loadPlayer() {
var popups = chrome.extension.getViews({type: "popup"});
if (popups.length != 0) {
var popup = popups[0];
console.log("Popup found, starting to load the player...");
var tag = popup.document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = popup.document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var done = false;
console.log("Finished loading the player.");
}
}
Run Code Online (Sandbox Code Playgroud)
onYouTubeIframeAPIReady函数如下:
function onYouTubeIframeAPIReady() {
console.log("Starting to instantiate the player...");
var popups = chrome.extension.getViews({type: "popup"});
if (popups.length != 0) {
var popup = popups[0];
popup.document.ytplayer = new YT.Player('player', {
height: …Run Code Online (Sandbox Code Playgroud) 我刚刚注意到,当我在本地进行测试时,Youtube 事件(onReady、onStateChange)不再触发,但当我将代码上传到JsFiddle时,Youtube 事件(onReady、onStateChange)不再触发。我决定从Youtube Player API复制并粘贴代码,我可以在其中验证它确实无法正常工作。还有其他人有这个问题吗?此问题出现在 Chrome、Firefox、IE、Safari 和 Opera 上。
编辑 - 当我console.log(player);在本地时,我发现它缺少很多 Youtube 功能,例如seekTo(), setVolume(),showVideoInfo()这些功能存在于 JsFiddle 中。我不确定为什么会发生这种情况,但我相信这可能是我的问题的根源。有任何想法吗?
<!DOCTYPE html>
<html>
<body>
<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="player"></div>
<script>
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. This function creates an <iframe> …Run Code Online (Sandbox Code Playgroud)