回答編集履歴

6

 

2022/07/17 06:18

投稿

退会済みユーザー
test CHANGED
@@ -86,12 +86,12 @@
86
86
 
87
87
  <script>
88
88
  function handleClick() {
89
- const inputText = document.getElementById("input_text");
89
+ const inputText = document.getElementById('input_text');
90
90
  google.script.run.withSuccessHandler(displayOutput).fn(inputText.value);
91
91
  }
92
92
 
93
93
  function displayOutput(outputText) {
94
- document.getElementById("output_text").innerHTML = outputText;
94
+ document.getElementById('output_text').innerHTML = outputText;
95
95
  }
96
96
  </script>
97
97
  </body>

5

 

2022/07/17 00:26

投稿

退会済みユーザー
test CHANGED
@@ -24,7 +24,7 @@
24
24
  ---
25
25
 
26
26
  また、上記の修正を行ってもGoogleサイトに埋め込んだ場合そのままのコードでは動作しません。
27
- Google サイトの中にGASで作ったwebサイトを埋め込んだ時、埋め込んでいる部分は固定の iframe になっていて、「webアプリ内でフォーム投稿後にページをリダイレクトさせ」というようなことはできません。
27
+ Google サイトの中にGASで作ったwebサイトを埋め込んだ時、埋め込んでいる部分の外側プロパティ編集不可の iframe になっていて、「webアプリ内でフォーム投稿後に埋め込み元の親ページを遷移させない」というようなことはできません。
28
28
  これはセキュリティ上の制限です。
29
29
 
30
30
  ・ボタンをクリックしてテキストボックス内の値を送信。

4

 

2022/07/17 00:23

投稿

退会済みユーザー
test CHANGED
@@ -42,7 +42,7 @@
42
42
  if (inputText.length > 5) {
43
43
  return 'good';
44
44
  }
45
- return "bad";
45
+ return 'bad';
46
46
  }
47
47
  ```
48
48
 

3

 

2022/07/16 14:25

投稿

退会済みユーザー
test CHANGED
@@ -42,7 +42,7 @@
42
42
  if (inputText.length > 5) {
43
43
  return 'good';
44
44
  }
45
- return "bad"
45
+ return "bad";
46
46
  }
47
47
  ```
48
48
 

2

 

2022/07/16 14:23

投稿

退会済みユーザー
test CHANGED
@@ -58,9 +58,6 @@
58
58
  </head>
59
59
 
60
60
  <body>
61
- <header>
62
- <h1>デモサイト</h1>
63
- </header>
64
61
  <p>
65
62
  <?=errorMsg ?>
66
63
  </p>

1

追記

2022/07/16 14:20

投稿

退会済みユーザー
test CHANGED
@@ -1,15 +1,13 @@
1
- test.gs:
2
- doPostの中で 変数 flag が if文の中で宣言されているため、
1
+ まず、もともとのコードでは、test.gs の doPost 関数の中で 変数 flag が if文の中で宣言されているため、
3
- if文の外の
4
- htmlTemplate.mozi = flag;
2
+ if文の外の htmlTemplate.mozi = flag;
5
- の部分でアクセスできずエラーになっています。
3
+ の部分でアクセスできずエラーになます。
6
4
  下記のようにif文の外で宣言してください。
7
5
  ```js
8
6
  function doPost(e) {
9
7
  let box;
10
8
  let htmlTemplate;
11
9
  let flag = '';
12
- box = e.parameter.mozi;
10
+ let box = e.parameter.mozi;
13
11
  if (box.length > 5) {
14
12
  flag = 'good';
15
13
  }
@@ -23,4 +21,85 @@
23
21
  return htmlTemplate.evaluate();
24
22
  }
25
23
  ```
24
+ ---
26
25
 
26
+ また、上記の修正を行ってもGoogleサイトに埋め込んだ場合そのままのコードでは動作しません。
27
+ Google サイトの中にGASで作ったwebサイトを埋め込んだ時、埋め込んでいる部分は固定の iframe になっていて、「webアプリ内でフォーム投稿後にページをリダイレクトさせる」というようなことはできません。
28
+ これはセキュリティ上の制限です。
29
+
30
+ ・ボタンをクリックしてテキストボックス内の値を送信。
31
+ ・その値に応じて、GAS側でデータを加工して元のページに返す
32
+ というような単純なwebアプリであれば、下記のようにajaxを利用すればよいでしょう。
33
+ test.gs
34
+ ```js
35
+ function doGet() {
36
+ const htmlTemplate = HtmlService.createTemplateFromFile('index');
37
+ htmlTemplate.errorMsg = '';
38
+ return htmlTemplate.evaluate();
39
+ }
40
+
41
+ function fn(inputText) {
42
+ if (inputText.length > 5) {
43
+ return 'good';
44
+ }
45
+ return "bad"
46
+ }
47
+ ```
48
+
49
+ index.html
50
+ ```html
51
+ <html lang="ja">
52
+
53
+ <head>
54
+ <base target="_top">
55
+ <meta charset="UTF-8">
56
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
57
+ <title>デモサイト</title>
58
+ </head>
59
+
60
+ <body>
61
+ <header>
62
+ <h1>デモサイト</h1>
63
+ </header>
64
+ <p>
65
+ <?=errorMsg ?>
66
+ </p>
67
+ <div class="submit_view">
68
+ <div>
69
+ <label for="exam-num">文字を入力してください</label>
70
+ <input type="text" name="mozi" id="input_text">
71
+ </div>
72
+
73
+ <div>
74
+ <input type="button" onclick="handleClick()" value="送信"/>
75
+ </div>
76
+ </div>
77
+ <div class="response_view">
78
+ <table>
79
+ <tbody>
80
+ <tr>
81
+ <td>返ってきた文字</td>
82
+ <td>
83
+ <div id="output_text"><div>
84
+ </td>
85
+ </tr>
86
+ </tbody>
87
+ </table>
88
+ </div>
89
+
90
+ <script>
91
+ function handleClick() {
92
+ const inputText = document.getElementById("input_text");
93
+ google.script.run.withSuccessHandler(displayOutput).fn(inputText.value);
94
+ }
95
+
96
+ function displayOutput(outputText) {
97
+ document.getElementById("output_text").innerHTML = outputText;
98
+ }
99
+ </script>
100
+ </body>
101
+
102
+ </html>
103
+ ```
104
+
105
+ ボタンクリック前とクリック後の表示を切り替えたい場合はcssを利用してクラスの表示非表示を制御すればできます。