質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

3198閲覧

GoogleAppsScriptのdoPost(e)内でhtmlに変数を渡す方法

fmlyimmr

総合スコア5

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/08/06 07:52

編集2022/08/06 08:54

前提

Google Apps Scriptでホームページを作成しております。
1枚目のホームページからPOSTで送信したデータをGAS内で処理し、
2枚目のホームページを表示したいと考えています。

GAS内の変数を2枚目のホームページ内で利用したいのですが、エラーが発生しました。

実現したいこと

  • [1 ] 2枚目のホームページで変数の中身が表示される

該当のソースコード:GoogleAppsScript

GoogleAppsScript

1function doPost(e) { 2 //tmpAryには文字列が入ります 3 var tmpAry = String(e.parameter.value).split(','); 4 5 // ①-1 script.google.com で接続が拒否されました 6 return HtmlService.createHtmlOutputFromFile("output"); 7 // ①-2 TypeError: HtmlService.createHtmlOutputFromFile(...).evaluate is not a function(行 61、ファイル「コード」) 8 return HtmlService.createHtmlOutputFromFile("output").evaluate(); 9 10 // ②-1 outputのページが開くが、<?!=user_id?> と表示 11 return HtmlService.createHtmlOutputFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 12 //②-2 TypeError: HtmlService.createHtmlOutputFromFile(...).setXFrameOptionsMode(...).evaluate is not a function(行 67、ファイル「コード」) 13 return HtmlService.createHtmlOutputFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL).evaluate(); 14 15 // ③-1 outputのページが開くが、<?!=user_id?> と表示 16 var template = HtmlService.createHtmlOutputFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 17 template.user_id = tmpAry[1]; 18 return template; 19 // ③-2 TypeError: template.evaluate is not a function(行 77、ファイル「コード」) 20 var template = HtmlService.createHtmlOutputFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 21 template.user_id = tmpAry[1]; 22 return template.evaluate(); 23 24 // ④-1 script.google.com で接続が拒否されました。 25 var template = HtmlService.createHtmlOutputFromFile('output'); 26 template.user_id = tmpAry[1]; 27 return template; 28 // ④-2 TypeError: template.evaluate is not a function(行 80、ファイル「コード」) 29 var template = HtmlService.createHtmlOutputFromFile('output'); 30 template.user_id = tmpAry[1]; 31 return template.evaluate(); 32 33 // ⑤-1 スクリプトが完了しましたが、返された値はサポートされている戻り値の型ではありませんでした。 34 return HtmlService.createTemplateFromFile("output"); 35 // ⑤-2 ReferenceError: user_id is not defined(行 7) 36 return HtmlService.createTemplateFromFile("output").evaluate(); 37 38 // ⑥-1 TypeError: HtmlService.createTemplateFromFile(...).setXFrameOptionsMode is not a function(行 85、ファイル「コード」) 39 return HtmlService.createTemplateFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 40 // ⑥-2 TypeError: HtmlService.createTemplateFromFile(...).setXFrameOptionsMode is not a function(行 96、ファイル「コード」) 41 return HtmlService.createTemplateFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL).evaluate(); 42 43 // ⑦-1 TypeError: HtmlService.createTemplateFromFile(...).setXFrameOptionsMode is not a function(行 90、ファイル「コード」) 44 var template = HtmlService.createTemplateFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 45 template.user_id = tmpAry[1]; 46 return template; 47 // ⑦-2 TypeError: HtmlService.createTemplateFromFile(...).setXFrameOptionsMode is not a function(行 95、ファイル「コード」) 48 var template = HtmlService.createTemplateFromFile('output').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 49 template.user_id = tmpAry[1]; 50 return template.evaluate(); 51 52 // ⑧-1 スクリプトが完了しましたが、返された値はサポートされている戻り値の型ではありませんでした。 53 var template = HtmlService.createTemplateFromFile('output'); 54 template.user_id = tmpAry[1]; 55 return template; 56 // ⑧-2 script.google.com で接続が拒否されました。 57 var template = HtmlService.createTemplateFromFile('output'); 58 template.user_id = tmpAry[1]; 59 return template.evaluate(); 60} 61

該当のソースコード:output.html

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <?!=user_id?> 8 <?=user_id?> 9 <?user_id?> 10 </body> 11</html>

試したこと

①-1 ~ ⑧-2まで総当たりで試しましたが、できませんでした。
doPost(e)ではなく、doGet(e)であれば、⑧-2で変数の受け渡しが可能でした。

ご指導やご指摘頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最小限のコードですが、doPostでdoGetの送信値を受け取り表示することが可能です。
下記、コードを参考にしてください。

gs

1function doGet(e) { 2 return HtmlService.createHtmlOutputFromFile("index.html") 3} 4 5function doPost(e) { 6 7 let html = HtmlService.createTemplateFromFile("output") 8 9 // 送信されてくるデータ 10 // {parameters={value1=[Ljava.lang.Object;@21816ceb, value2=[Ljava.lang.Object;@6d32f109}, contentLength=23.0, postData=FileUpload, parameter={value2=bbbb, value1=aaaa}, queryString=, contextPath=} 11 // 送信したパラメータを取得 12 let params = e.parameter 13 14 // 送信したパラメータからinputタグのnameで対象の値を抽出し、セット 15 html.value1 = params.value1 16 html.value2 = params.value2 17 18 return html.evaluate() 19}

デプロイURLにアクセスした際に、最初に表示されるページ

index.html

1<!DOCTYPE html> 2<html> 3 4<head> 5 <base target="_top"> 6</head> 7 8<body> 9 <h1>get画面</h1> 10 11 <form method="post" action="ウェブアプリのデプロイURL"> 12 <div> 13 <label>送信値1: <input type="text" name="value1" /></label> 14 </div> 15 <div> 16 <label>送信値2: <input type="text" name="value2" /></label> 17 </div> 18 <p> 19 <input type="submit" value="post送信" /> 20 </p> 21 </form> 22</body> 23 24</html>

post送信した際に表示されるページ

output.html

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <p>post実行</p> 8 <div> 9 <label>送信値1: <?=value1 ?></label> 10 </div> 11 <div> 12 <label>送信値2: <?=value2 ?></label> 13 </div> 14 </body> 15</html>

URLアクセスformに入力post送信後
イメージ説明イメージ説明イメージ説明

投稿2022/08/06 09:38

k.a_teratail

総合スコア845

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

k.a_teratail様

ご返信とご教授、ありがとうございます。
ご提示頂いたコードを引用することでPost(e)内でhtml送信することを確認致しました。

しかし、いざ、作成中のコードの中に組み込んでみると「script.google.com で接続が拒否されました」のエラーが出現し、2枚目のホームページを表示することができませんでした。

質問で提示させて頂いた⑧-2との違いが理解できませんでしたが、ご提示頂いたコードはPost(e)内で動くことが間違いありませんので、その他の部分も一つ一つ照らし合わせてみました。
結果、index.htmlの<base target="_top">の削除が原因であったことが判明しました。

お陰様で解決に至りました。3日間、頭を悩ませておりました。本当にありがとうございました。

投稿2022/08/06 11:02

fmlyimmr

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問