私はトラブルシューティングを行い、これに対する答えを何時間も探していましたが、役に立ちませんでした. API ドキュメントのサンプル コードがそのまま使用されています。他の人が投稿して IE9 で動作すると言っているサンプル コードは、私には適していません。doctype が html で適切に設定されていること、CSS で display=none を使用して iframe を隠していないこと、ブラウザー モードが IE9 でドキュメント モードが IE9 標準であることを確認済みです。私のセキュリティ設定は中高に設定されています。Google のサンプル ページでさえ、IE9 ブラウザでは機能しません。
https://developers.google.com/youtube/youtube_player_demo
[再生] をクリックしてムービーを再生しようとすると (上記のリンク)、IE のスクリプト デバッグ コンソールにあらゆる種類のエラーが表示されます。最初のエラーは次のようになります。
SCRIPT5009: 'video' は定義されていません
助けてください!私のサンプルコードは以下です。映画が読み込まれ、「API の準備ができました」というアラートが表示されますが、IE9 では他のイベントは発生しません。何が欠けているのかわかりません!これがすぐにわからなければ、私のプロジェクトで YouTube を使用して html5 ビデオを再生するのをやめなければなりません。
<!DOCTYPE html>
<html>
<head><title></title></head>
<body>
<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="player"></div>
<script type="text/javascript">
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
// This is a protocol-relative URL as described here:
// http://paulirish.com/2010/the-protocol-relative-url/
// If you're testing a local page accessed via a file:/// URL, please set tag.src to
// "https://www.youtube.com/iframe_api" instead.
//tag.src = "//www.youtube.com/iframe_api";
tag.src = "https://www.youtube.com/iframe_api";
//tag.src = "http://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() {
alert("API is ready!");
player = new YT.Player('player', {
height: '450',
width: '800',
videoId: 'mU7aJgvh9K8',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
event.target.playVideo();
alert("Player is ready!");
}
// 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) {
alert("State changed!");
if (event.data == YT.PlayerState.PLAYING && !done) {
setTimeout(stopVideo, 6000);
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
</script>
</body>
</html>