
前提・実現したいこと
質問に対しテラテイルから編集してはと連絡があり簡潔に編集しました。 ローカルで使用していた備忘録をGASに移植しました。 全体の構成 一つの親ページとメニューで選択される複数の子ページがあります。 親ページにはページの表題とBGMのコントローラとインフレームがあります。 子ページにはコンテンツの選択メニューとコンテンツがセットで複数あります。 インフレームには複数ある子ページをメニューで選択して表示します。
発生している問題・エラーメッセージ
問題点(➀と➁は以後共通) ➀親ページを表示するとインフレームに指定された子ページを表示します。 (ここまで問題がありましたがテラテイルの力を借りて解決しました) ここからが今回の問題点です。 ➁メニューを選択すると選択した子ページをインフレームに表示します。 しかし➀はOKですが➁はNGです。 ➁はインフレームが真白になってgoogleのエラー表示もありません。 デベロッパーのコンソールでエラーを見ると Uncaught TypeError: Cannot read property 'children' of undefined at HTMLDocument.changeFontSize (script.js:37) で、実際GASのエディターで見ても同じエラーが出ていました。 リンク方法は 子ページへのリンクは➀と➁の2つありますが現在どちらも同じにしています、 ➀<body onloadで呼ばれる関数のdocument.getElementById('ifrmencont').src = URLで 親ページの<iframe src=""にURLを設定しています。 ➁メニュー選択で呼ばれる関数のwindow.frameElement.src = URLで 親ページの<iframe src=""にURLを設定しています。 結果的に全く同じですがなぜか動作が違います。```
該当のソースコード
```ここに言語を入力 -----親ページのソースコード(index) <!DOCTYPE html> <html> <head> <base target="_top"> <?!= HtmlService.createHtmlOutputFromFile('Css').getContent(); ?> <!-- css読込 --> </head> <audio id="audio"></audio> <script type="text/javascript"> | BGMコントローラの操作で省略 | //子ページ読込 function openURL(url) { var gglURL = "https://script.google.com/macros/s/AKfycbxQOayD1oYR8kFXeFRHSzlXMJSicQvQdEvVA0yJ_SiRydfPmr2B/exec?p="; //googleベースURL var praURL = gglURL + url; //ファイル名のパラメータ追加 document.getElementById('ifrmencont').src = praURL; //iframeのsrcに設定 //googleメッセージ消去テスト中 var removeElem = document.getElementsByTagName("tr")[0]; //最初のtr要素取得(現在取得できない) alert(removeElem); //エラー確認用(現在undefined) removeElem.parentNode.removeChild(removeElem); //要素削除(現在取得できないのでエラー) } </script> <body onload="openURL('kousin')"> <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="" frameborder="0" scrolling="no"></iframe> </div> </body> </html> -----子ページのソースコード(kousin分) <!DOCTYPE html> <html lang="ja"> <head> <base target="_top"> <?!= HtmlService.createHtmlOutputFromFile('Css').getContent(); ?> <!-- css読込 --> </head> <script type="text/javascript"> function openURL(url) { var gglURL = "https://script.google.com/macros/s/AKfycbxQOayD1oYR8kFXeFRHSzlXMJSicQvQdEvVA0yJ_SiRydfPmr2B/exec?p="; //googleベースURL var praURL = gglURL + url; //ファイル名のパラメータ追加 // location.href = praURL; //子ページから直接読込 // window.parent.document.getElementById('ifrmencont').src = praURL; //iframeのsrcに設定:エラーになる window.frameElement.src = praURL; //親ページから関節読込(iframeのsrcに設定) } </script> <body> <div id="menconwak"> <div id="menuwaku"> <ul> <li class="midasi">家系図</li> <li><button class="lnkbar" onclick="openURL('YotuKakeizu')">〇〇〇家</button></li> <li><button class="lnkbar" onclick="openURL('AbeKakeizu')"✕✕家</button></li> | 他のメニュー | <li><button class="lnkbar" onclick="openURL('Help')"><b>操作説明</b></button></li> </ul> </div> <div id="contwaku"> <div id="content"> <h2>更新履歴</h2> <br> <p id="rireki"> | 更新履歴内容 | </p> </div> </div> </div> </body> </html> -----doGet関数のソースコード function doGet(e){ var page = e.parameter["p"]; if(page == "index" || page == null){ var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate(); return htmlOutput; } else if(page == "kousin"){ var htmloutput = HtmlService.createTemplateFromFile('kousin').evaluate(); htmloutput.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); return htmloutput; } else if(page == "YotuKakeizu"){ var htmloutput = HtmlService.createTemplateFromFile('YotuKakeizu').evaluate(); htmloutput.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); return htmloutput; } | メニュー分 | }
### 試したこと ```ここに言語を入力 ```ここに言語を入力 調べたこと-------------------------------------------------------- 1.リンク方法を親ページからでなく直接子ページからリンクする方法を試しました。 location.href = URL ですが➁と同じく真白になります。 2.そこで➁の状態でデベロッパー(F12)でソースを確認しました。 GASのソースはあまりにも巨大で自分のソースが見当たりません。 Elementsでインフレームを選択して<html>を見ると何とソースが空でした。 親ページの<iframe src=""はメニューで選択したURLに書換られてます 比較のため➀と➁を同じファイルにしてGASのソースを比較しました。 同じように見えますが➁はインデントのブロックが1つ多くなっています。 これでは読込でも何も表示できません、 リンク方法もdoGet関数も全く同じでなぜこうなるのか。 何か思い違いがあるかもしれません。何が悪いのか宜しくお願いします。
### 補足情報(FW/ツールのバージョンなど) 使用ブラウザはchromeの最新バージョン。 開発はGooglrDriveのScriptEdter。


回答2件
あなたの回答
tips
プレビュー