Youtube嵌入Iframe-本地未触发事件



我刚刚注意到,当我在本地测试时,Youtube事件(onReady、onStateChange)不再触发,而是在我将代码上传到JsFiddle时工作。我决定从Youtube Player API复制并粘贴代码,在那里我可以验证它确实不起作用。其他人有这个问题吗?此问题出现在Chrome、Firefox、IE、Safari和Opera上。

编辑-当我在本地console.log(player);时,我发现它缺少JsFiddle中的许多Youtube功能,如seekTo()setVolume()showVideoInfo()。我不确定为什么会发生这种情况,但我相信这可能是我问题的根源。有什么想法吗?

http://jsfiddle.net/8ZmKx/

<!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> (and YouTube player)
      //    after the API code downloads.
      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '190',
          width: '140',
          videoId: 'M7lc1UVf-VE',
          events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
          }
        });
      }
      // 4. The API will call this function when the video player is ready.
      function onPlayerReady(event) {
        console.log('ready');
        event.target.playVideo();
      }
      // 5. The API calls this function when the player's state changes.
      //    The function indicates that when playing a video (state=1),
      //    the player should play for six seconds and then stop.
      var done = false;
      function onPlayerStateChange(event) {
        console.log('change');
        if (event.data == YT.PlayerState.PLAYING && !done) {
          setTimeout(stopVideo, 6000);
          done = true;
        }
      }
      function stopVideo() {
        player.stopVideo();
      }
    </script>
  </body>
</html>

Youtube iframe API目前似乎已损坏,但我还没有看到官方确认

另请参阅:

在模板中显式写入iframe时,onReady回调未启动

YouTube API onPlayerReady未启动

编辑:以下是修复方法:https://code.google.com/p/gdata-issues/issues/detail?id=5670#c6

以下是上面链接中的答案的直接引用:

快速解决方法是添加原点=http://www.example.com(替换与您的服务器全域;请确保使用http://或https://适用于您的网站)添加到玩家的src=属性iframe元素。请确保origin=属性的值与主机域和URL方案完全匹配。例如

<iframe
  type="text/html"
  width="640"
  height="480"
  src="https://www.youtube.com/embed/VIDEO_ID?enablejsapi=1&origin=https://www.example.com"
  frameborder="0">
</iframe>

我目前正在与工程团队合作,以确定origin=是否需要继续前进,或者需求可以恢复,但这是立即解决的问题。道歉同时,由于缺乏先进的沟通和沟通。

如果使用YT.Player()构造函数创建iframe元素对你来说,这不是一个问题——这有点边缘化明确包含iframe元素作为他们页面的HTML。

我实现了上面的修复,它对我有效。

我已经进行了修复,实现了"origin="param,修复了原始错误并触发了状态更改事件。

现在,具有该原始参数是导致错误的原因。删除了参数,它又能工作了。

相关内容

  • 没有找到相关文章