0

Chrome と Safari では完全に正常に動作しますが、Firefox では動作しない YouTube Javscript API の実装があります。はい、私はウェブサーバーでこれをやっています;)

ドキュメントの準備ができたら、関数 showVideo(); を呼び出します。

これはすべての関連コードです:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>    

<div id="ytplayer" class="youtubepromovideo"></div>

<script type="text/javascript">   
function showVideo(){
    var params = { allowScriptAccess: "always" };
    swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=ytplayer", "ytplayer", "400", "400", "8", null, null, params);
}

function onYouTubePlayerReady(playerId) {
    console.log("player ready: "+playerId);
    loadNewVideo();
}

function loadNewVideo() {
    var id = 'jc8n44ddy9A';
    var startSeconds = 0;
    console.log("loading video");
    ytplayer.loadVideoById(id, startSeconds);
}
</script>

すべてのブラウザーでプレーヤーが表示されますが、Firefox ではビデオが読み込まれません。私のログには、Firefox で「動画を読み込んでいます」というメッセージが表示されますが、その後は何も起こりません。エラーすらありません。ytplayer.loadVideoById('jc8n44ddy9A', 0);すべてがロードされた後に手動で呼び出そうとすると、エラーが発生しますReferenceError: ytplayer is not defined

ytplayer が明示的に変数として定義されていないことは認識していますが、私の推測 (?) は、YouTube API が他のブラウザーで動作するため、それを行っているということです。また、どこかでグローバルに定義した場合、var ytplayerそれは修正されません。

どんなアドバイスでも大歓迎です!

4

1 に答える 1

0

他のブラウザがどこytplayerから参照を取得するかはわかりませんが、グローバルに定義して(とにかく、与えた例のように)、参照を次の場所に追加する必要がありますonYouTubePlayerReady

ytplayer = document.getElementById( playerId );

Flashを使用しないブラウザでもサポートできるように、 iframeプレーヤーを使用したほうがよいでしょう。「controls」パラメータを使用すると、コントロールなしでロードできると思います。

于 2012-07-08T21:44:52.170 に答える