前提・実現したいこと
親父と自分の備忘録をHTMLで作成しローカルで起動して閲覧とメンテをしています。
閲覧しながら音楽を聴きたいと思いBGMのコントローラをHTMLで作成し追加しました。
HTMLはセキュリティーの関係でミュージックフォルダに格納して起動しています。
最近GASのWebアプリケーションを知りセキュリティーの問題が回避できると思いました。
それでHTMLをGASに移植しましたがdoGet関数やCSSの読込など苦労しました。
発生している問題・エラーメッセージ
HTMLは表題部分+BGMコントローラ部分とメニューとコンテンツの部分があり、
表題部分+BGMコントローラ部分は正常に表示され機能しています。
メニューとコンテンツの部分は問題があり補足情報で説明します。
BGMコントローラ部分は正常に表示され機能していますが再生ができません。
音楽ファイルのパス名は正常に取得されファイル名も表示されます。
再生フォルダは複数選択でき再生フォルダも正常に切替できます。
エラーメッセージは全くありません。
以前HTMをドキュメントで起動したときも同じような現象がありました。
これはミュージックフォルダでHTMLを起動することで解決しています。
GASでもセキュリティー問題が発生するのかGAS独自の方法あるのかわかりますん。
該当のソースコード
言語 HTM、JavaScript
<!DOCTYPE html> <html> <head> <base target="_top"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> <?!= HtmlService.createHtmlOutputFromFile('Css').getContent(); ?> </head> </head> <audio id="audio"></audio> <script type="text/javascript"> var media = document.getElementById("audio"); //オーディオタグ var ongstp = 1; //演奏状態 0:連続演奏 1:停止 2:単独演奏 var ongfld = 0; //音楽演奏中フォルダ番号(配列添数) var ongfil = 0; //音楽演奏中ファイル番号(配列添数) var ongfldmax = 0; //音楽表示中最大フォルダ数 var ongfilmax = 0; //音楽演奏中最大ファイル数 var ongallmax = 0; //音楽パス取得中最大ファイル数 var ongjyunam = new Array(); //音楽パス名(順番) var ongrdmnam = new Array(); //音楽パス名(混番) var ongfldfil = new Array(); //音楽フィールド別ファイル数 //初期設定 var volume = 0.2; //演奏音量 0~0.7 media.volume = volume; //音楽ボリューム設定 var sektim = 0; //演奏時間 //-- 音楽処理 -------------------------------------------------------------------------- //フォルダ選択 function ongpasget() { // document.getElementById('playstrt').innerHTML = "開"; document.getElementById('playstop').innerHTML = "<b>停</b>"; // document.getElementById('playback').innerHTML = "-"; document.getElementById('ongpas').innerHTML = "---"; if (ongstp == 0) { //演奏開始中 lisntei(); //演奏停止処理 } //非表示INPUTボタン押下 var event = document.createEvent( "MouseEvents" ); //イベントオブジェクト event.initEvent("click", false, true); //イベント設定 document.getElementById('ongfilselct').dispatchEvent(event); //INPUTクリック } | | //音楽演奏 ------------------------------ function ongplay() { var dspfilnam = ongrdmnam[ongfld][ongfil].substr(ongrdmnam[ongfld][ongfil].lastIndexOf("/") + 1); var dspfilnam = dspfilnam.substring(0,dspfilnam.lastIndexOf(".")); if (ongfld == 0) { dspfilnam = "[ " + dspfilnam + " ]"; } document.getElementById('ongpas').innerHTML = dspfilnam; //ファイル名表示 media.pause(); //演奏停止処理 media.currentTime = 0; //演奏位置初期化 media.src = ongrdmnam[ongfld][ongfil]; //演奏パス名設定 media.play(); //演奏処理 } //音楽自動演奏 ------------------------------ media.onended = function(){ if (ongfil == ongfilmax - 1) {ongfil = 0;} else {ongfil = ongfil + 1;} var dspfilnam = ongrdmnam[ongfld][ongfil].substr(ongrdmnam[ongfld][ongfil].lastIndexOf("/") + 1); var dspfilnam = dspfilnam.substring(0,dspfilnam.lastIndexOf(".")); if (ongfld == 0) { dspfilnam = "[ " + dspfilnam + " ]"; } document.getElementById('ongpas').innerHTML = dspfilnam; //ファイル名表示 media.src = ongrdmnam[ongfld][ongfil]; //演奏パス名設定 media.play(); //演奏 } //音楽パス取得 ------------------------------ function ongfileListDirectory(files) { //ファイルパス配列作成(全フォルダ/フォルダ別シーケンシャル) var allfil = ongallmax; //全フォルダファイル数(複数選択)) var fldnum = ongfldmax + 1; //フォルダ番号(=0:全フォルダ >1:フォルダ別) var fldfil = 0; //フォルダ別ファイル数 if (ongallmax == 0) {ongjyunam[0] = new Array();} //全フォルダファイル配列追加 ongjyunam[fldnum] = new Array(); //フォルダ別ファイル配列追加 for (i = 0; i < files.length; i++) { if (files[i].name.endsWith('.MP3') == true || files[i].name.endsWith('.mp3') == true) { //音楽ファイル ongjyunam[0][allfil] = files[i].webkitRelativePath; //全フォルダパス名取得 ongjyunam[fldnum][fldfil] = files[i].webkitRelativePath; //フォルダ別パス名取得 allfil = allfil + 1; fldfil = fldfil + 1; } } if (fldfil > 0) { //対象フォルダ選択済 //全フォルダシャッフル配列作成 var pashclone = ongjyunam[0].concat(); //全フォルダ配列のクローン var l = allfil; //全フォルダファイル数 var filtmp = new Array(); //作業用配列 while(l-- > 0) { var i = Math.floor(Math.random() * l); //乱数取得 filtmp.push(pashclone[i]); //全フォルダシャッフル配列に追加 pashclone.splice(i, 1); //pashcloneから削除 } ongrdmnam[0] = filtmp; //全フォルダ混番配列に格納 //フォルダ別シャッフル配列作成 var pashclone = ongjyunam[fldnum].concat(); //パス名のクローン var l = fldfil; var filtmp = new Array(); //作業用配列 while(l-- > 0) { var i = Math.floor(Math.random() * l); //乱数取得 filtmp.push(pashclone[i]); //フォルダ別シャッフル配列に追加 pashclone.splice(i, 1); //pashcloneから削除 } ongrdmnam[fldnum] = filtmp; //フォルダ別シャッフル配列に追加 ongfldmax = fldnum; //最大フォルダ数 ongallmax = allfil; //最大ファイル数(複数選択加算用) ongfldfil[0] = allfil; //全フォルダファイル数を配列に格納 ongfldfil[fldnum] = fldfil; //フォルダ別ファイル数を配列に格納 ongfld = fldnum; //演奏フォルダ初期番号 ongfil = 0; //演奏ファイル初期番号 ongfilmax = ongfldfil[ongfld]; //表示最大ファイル数 sektim = 0; //演奏位置初期化 //取得フォルダ表示 var dspfldnam = ongrdmnam[ongfld][ongfil].substring(0,ongrdmnam[ongfld][ongfil].lastIndexOf("/")); document.getElementById('ongpas').innerHTML = dspfldnam.substr(0,18); //フォルダ名表示 document.getElementById('playstrt').innerHTML = "<b>演</b>"; document.getElementById('playback').innerHTML = "<b>削</b>"; if (ongfld == 2) { //フォルダ複数選択 document.getElementById('ongfldbtn').innerHTML = "<b>替</b>"; //ボタン名変更 } } else { //対象フォルダ以外 document.getElementById('ongpas').innerHTML = "選択folder 対象外"; } } //ブログレスバー表示 media.ontimeupdate = function(){ var barlen = media.currentTime / media.duration; if (canvs.getContext) { var bar = canvs.getContext('2d'); var fillWidth = barlen * canvs.width; bar.clearRect(0, 0, canvs.width, canvs.height); bar.fillStyle = "rgb(15, 222, 119)"; bar.fillRect(0, 0, fillWidth, canvs.height); } } //ボタンホバー処理(タブレット用) ------------------------------ var linkTouchStart = function(){ thisAnchor = $(this); touchPos = thisAnchor.offset().top; moveCheck = function(){ nowPos = thisAnchor.offset().top; if(touchPos == nowPos){ thisAnchor.addClass("hover"); } } setTimeout(moveCheck,10); } var linkTouchEnd = function(){ thisAnchor = $(this); hoverRemove = function(){ thisAnchor.removeClass("hover"); } setTimeout(hoverRemove,300); } //イベント取得 $(document).on('touchstart','button',linkTouchStart); $(document).on('touchend','button',linkTouchEnd); //-------------------------------------------------------- </script> <body> <div id="hyobgmwak"> <div id="hyowak"> <div id="kamon"> <img src="https://drive.google.com/uc?id=16GtqNtZEuxq6N_xi-f50brhIKySeAI1I" alt="四ツ谷家の家紋" width="55" height="55"> </div> <div id="taitl"> <h1>〇 〇 〇 家 の 備 忘 録</h1> <p>〇〇〇藤三郎の備忘録をもとに〇〇〇晃の備忘録を追加</p> </div> </div> <div id="bgmwak"> <div id="btndsp"> <button id="foldsel" onClick="ongpasget()"><b>選</b></button> <input type="file" webkitdirectory directory multiple onChange="ongfileListDirectory(this.files)" id="ongfilselct" style="display:none;"> <button id="ongfldbtn" onClick="ongfldsel()">―</button> <button id="playstrt" onClick="lisnkai()">―</button> <button id="playstop" onClick="lisntei()"><b>停</b></button> <button id="playback" onClick="ongmodoru()">―</button> <button onClick="ongvoludai()"><b>▲</b></button> <button onClick="ongvolusyo()"><b>▼</b></button> </div> <div id="ongpas"> folder未選択 </div> <canvas id="canvs" width="160" height="2"></canvas> </div> </div> <div id="iframewak"> <iframe id="ifrmencont" name="ifram" src="https://script.google.com/macros/s/AKfycbxQOayD1oYR8kFXeFRHSzlXMJSicQvQdEvVA0yJ_SiRydfPmr2B/exec?p=kousin" frameborder="1" scrolling="no"></iframe> </div> </body> </html>
試したこと
GASのWebアプリケーションは全くの初歩です。
Webでサーフィンしましたが見つかりません。
補足情報(FW/ツールのバージョンなど)
使用しているブラウザはChromeの最新版です。
移植はGoogleDriveのScriptEdterでおこないました。
この問題のほかにもう一つ問題があります。
ソースの末尾にインフレームのタグがあります。
ここに備忘録のメニューとコンテンツを表示します。
これは少し前に「GASでインフレームにページを表示」で質問しています。
よろしければ見てください。
1件回答がありますが自分の未熟もあり未解決です。
今再確認したら修正後の更新をしていなかったようです。
回答1件
あなたの回答
tips
プレビュー