YouTube iframeプレーヤーAPI - OnStateChangeが起動しない

YouTube iframe player API - OnStateChange not firing


質問 written by Laurence Cooper @2013-07-03 16:54:47Z

: 13 : 1 : 26

私は文字通り、YouTube開発者ページのiframe埋め込み向けYouTubeプレーヤーAPIリファレンスのコードをコピーして貼り付けました(見出し「はじめに」の下から)。 唯一の違いは、onPlayerStateChange関数内で何か問題があると考えていたため、状態が変化したときに起動するアラートを追加したことです。

あなたはhttp://jsfiddle.net/jesMv/で jsFiddleを見ることができます。

述べたように、それはちょうど追加されたYouTubeの開発者ページからのコードの正確なコピーです。

alert('State Changed')

onPlayerStateChange関数で最初に起動するものとして。

しかし、何も起きていません...私がこれをどのように見て変更したとしても、onStateChangeに何かをさせることはできません。

どうすればこの問題を解決できますか?

回答 1 written by Community @2017-05-23 12:09:48Z
21

ここで読むことができるiFrameプレーヤーAPI(2013年6月に修正されました)に一時的な問題がありました: https : //code.google.com/p/gdata-issues/issues/detail?id=4706

Jeff Posnickがここに一時的な回避策を投稿しました。http://jsfiddle.net/jeffposnick/yhWsG/3/

一時的な修正として、onReadyイベント内にイベントリスナーを追加するだけです。

function onReady() {
    player.addEventListener('onStateChange', function(e) {
        console.log('State is:', e.data);
    });
}

YT.PLAYERコンストラクタからonStateChangeイベントを必ず削除してください(jsfiddleを参照)。

また、誰かがGoogle Code Issue Threadで述べたように、onStateChangeイベントをリッスンする代わりに、間隔を設定してプレーヤーに現在の状態をポーリングします。 これを行うためのコードスニペットの例を次に示します。

Also, as someone mentioned on the Google Code Issue Thread, you set an interval and poll the player for its current state instead of listening for the onStateChange event. Here is an example code snippet for doing that:

FirefoxとIEの問題

他の人々はFirefoxがcssプロパティdisplay: none持つコンテナに置かれている場合Firefoxはインスタンス化しないと述べています。 また、Internet Explorerは表示設定では機能しません。 これが問題であることがわかった場合は、 left: -150%ようにコンテナをページの外に配置してみてください。- left: -150%

Steve Meisnerがこれについて語っています: YouTube APIはFirefoxにはロードされていないようで、IFrameはロードされますが、onPlayerReadyイベントは発生しませんか。

そしてもう一つの関連するSO質問: YouTube iframe API - onReadyとonStateChangedイベントはIE9で発火しない

編集:元のバグが2013年に修正された後、人々がまだこのエラーを見ているので、私はより徹底的にこの答えを編集しました。

コメント 1

問題は、私がまだ修正されていないと書いているようです(PT時間00.44)。

written by loretoparisi @2013-06-13 07:45:04Z

コメント 2

私の一日を保存!ありがとう、相棒!!

written by Nedudi @2013-06-13 10:11:47Z

コメント 3

APIがロードされた後に置き換えられるdivではなくiframeを使用している場合は機能しない可能性があります。

written by @

コメント 4

私の場合、これは解決策ではありませんでした(そしてこのバグは今では解決されるでしょうか?)私はdisplay:noneを持っていましたdisplay:noneビデオのコンテナにはdisplay:noneなく、APIは起動しませんでした。もっとここに: stackoverflow.com/a/22199021/406171

written by スティーブマイスナー @2014-03-05 13:42:22Z

コメント 5

ありがとうございます。これを機能させるには、ポーリングによる回避策が必要でした。(完全を期すために)ポーリング関数を2回更新しました。 - 変数を初期化するための最初の行としてvar playerStateを追加します。イベントが発生した後の新しい状態。

written by Daan Wilmer @2015-06-29 09:16:36Z