YouTube再生中にボリュームを変更して、別ページに遷移して別のYouTubeを再生すると、変更したボリュームの値が引き継がれているかと思います。
APIからボリュームを変更した場合も同様に引き継がれると思っていたのですが、違うようだったので実験してみました。
サンプルコード
以下の流れで実験を行ってみます。
- YouTubeを再生して、ボリュームを適当に変更してから次のページへ
- YouTubeを再生すると、JavaScriptで自動でミュートにされるので、そのまま次のページへ
- YouTubeを再生したときに、1で設定したボリュームになるのか、2で設定したミュートになるのか確認
HTML
<div id="sample"></div>
JavaScript(1ページ目)
// YouTube Player APIを読み込む var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); // プレーヤーを埋め込む場所 var ytArea = 'sample'; // 埋め込むYouTube ID var ytID = 'UB3WKlkIqYo'; // プレーヤーのサイズを指定 var ytWidth = 640; var ytHeight = 390; // API読み込み後にプレーヤー埋め込み function onYouTubeIframeAPIReady() { ytPlayer = new YT.Player(ytArea, { height: ytHeight, width: ytWidth, videoId: ytID }); }
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ1
JavaScript(2ページ目)
// YouTube Player APIを読み込む var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); // プレーヤーを埋め込む場所 var ytArea = 'sample'; // 埋め込むYouTube ID var ytID = 'WTneeCE4Dcg'; // プレーヤーのサイズを指定 var ytWidth = 640; var ytHeight = 390; // API読み込み後にプレーヤー埋め込み function onYouTubeIframeAPIReady() { ytPlayer = new YT.Player(ytArea, { height: ytHeight, width: ytWidth, videoId: ytID, events: { 'onStateChange': onPlayerStateChange } }); } function onPlayerStateChange(e) { var ytStatus = e.target.getPlayerState(); if(ytStatus == 1) { ytPlayer.setVolume(0); } }
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ2
JavaScript(3ページ目)
// YouTube Player APIを読み込む var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); // プレーヤーを埋め込む場所 var ytArea = 'sample'; // 埋め込むYouTube ID var ytID = 'STg4Ya8bEFo'; // プレーヤーのサイズを指定 var ytWidth = 640; var ytHeight = 390; // API読み込み後にプレーヤー埋め込み function onYouTubeIframeAPIReady() { ytPlayer = new YT.Player(ytArea, { height: ytHeight, width: ytWidth, videoId: ytID }); }
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ3
結果は最初に設定した値になっていたので、JavaScriptから変更したボリュームは引き継がれていないようでした。
2ページ目でJavaScriptでミュートにした部分を80に変更する形でも試してみます。
JavaScriptの31行目にあるsetVolumeの値を変更しただけなので、コードは割愛します。
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ2-1
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ2-2
JavaScriptからボリュームを変更した場合に引き継がれるかのデモページ2-3
結果は同じく、JavaScriptから変更したボリュームは引き継がれませんでした。
ミュートにした状態で自動再生させる場合、サイト内にある別ページのYouTubeにも対応がいるのかなと思っていたのですが、JavaScriptから変更したボリュームは引き継がれないようなので特に対応はいらなそうです。
コメントが承認されるまで時間がかかります。