前提・実現したいこと
当方、Monacaでyoutube iframe api を利用し、動画を埋め込んだアプリを作成中です。
javascript(AngularJS)でyoutube iframe apiのディレクティブを作成し、動画埋め込みページ(game.html)読み込み時に動画が読み込まれるようにしております。
1回目に、トップ画面(top.html)から動画埋め込みページ(game.html)に遷移したところ、正常に動画が読み込まれるのですが、一度トップ画面に戻り、再度動画埋め込みページ(game.html)に遷移したところ、動画が読み込まれません。原因について考えていたのですが、どうしても思いつかないため、分かる方がいらっしゃいましたら、ご教示いただけると幸いです。
よろしくお願いいたします。
該当のソースコード
html
1//top.html 2<ons-page> 3 <div ng-controller="topCtrl as top"> 4 <div class="list"> 5 <ons-list> 6 <ons-list-item modifier="chevron" class="item" ng-click="top.gameStart()"> 7 </ons-list-item> 8 </ons-list> 9 </div> 10 </div> 11</ons-page>
html
1//game.html 2<ons-page> 3 <div ng-controller="gameCtrl as game"> 4 <div class="youtube"> 5 <youtube id="youtube"></youtube> 6 </div> 7 </div> 8</ons-page>
JavaScript
1app.directive('youtube', function($window){ 2 var _link = function(scope, element, attr){ 3 var tag = document.createElement('script'); 4 tag.src = "https://www.youtube.com/iframe_api"; 5 var firstScriptTag = document.getElementsByTagName('script')[0]; 6 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 7 var player; 8 $window.onYouTubeIframeAPIReady = function() { 9 player = new YT.Player(element.children()[0], { 10 width: "100%", 11 height: "100%", 12 videoId: XXX,//任意のyoutube id 13 playerVars: { 14 playsinline:1,//インライン再生を有効化 15 controls: 0 //コントロールバーを非表示 16 }, 17 events: { 18 'onReady': onPlayerReady, 19 'onStateChange':onPlayerStateChange, 20 } 21 }); 22 } 23 function onPlayerReady(event) { 24 event.target.playVideo(); 25 } 26 27 function onPlayerStateChange(event) { 28 //任意の処理 29 } 30 }; 31 return { 32 link: _link, 33 scope: { 34 width: "@", 35 height: "@", 36 youtubeId: "@", 37 }, 38 restrict: 'E', 39 template: '<div></div>', 40 }; 41}); 42 43app.controller('topCtrl',function(){ 44 this.gameStart=function(){ 45 myNavigator.pushPage('game.html'); 46 } 47}); 48 49app.controller('gameCtrl',function(){ 50//処理 51});
試したこと
動画埋め込みページ(game.html)からトップ画面(top.html)に戻る際reload()させることにより、強制的に2回目以降も、game.htmlで動画を読み込ませることができましたが、根本的な問題解決にはなっていないため、根本の原因を追究しております。
あなたの回答
tips
プレビュー