GoogleFormカスタマイズの確認画面を実装

  • column

前回「GoogleFormでお客様のフォームを作るときの落とし穴」と題して、GoogleFormのHTMLカスタマイズでお問合せフォームを作成する際につまづいたポイントを記事にまとめましたが、今回は確認画面の作成についてご紹介します。

前回の案件では、

入力画面→送信完了画面→自動送信確認メール

の実装でした。

今回は、

入力画面→入力確認画面→送信完了画面→自動送信確認メール

確認画面の実装についてまとめます。

結論:Googleフォームだけでは「確認ページを挟む」ことはできない

GoogleFormはJavaScriptでの送信内容の加工や遷移を自由に制御できません(セキュリティの都合上、フォームの中身にJSでアクセスできない構造です)。

GoogleFormは、

  • 送信前の中間画面(確認)を挟む設計がそもそもできない。
  • 入力中のデータを他ページに送ったり、HTMLに差し込んだりも不可能。

よって「独自HTMLフォーム + GAS Webアプリ」が必須になります。

GAS WebアプリだとGoogleFormではなく、HTMLとGASで組むことになります。GoogleForm3を使用してお問合せフォームを作成したかったので、Geminiに聞いてみることに。

静的ページ(index.html)に入力したデータを確認画面ページのconfirm.htmlに渡して、 そのページのデータを <form action="https://docs.google.com/forms/xxx/formResponse" method="post" target="hidden_iframe" onsubmit="submitted = true;">のGoogleFormに連携できないかな?

鋭いアイデアですが、残念ながらそのやり方は原則「不可能に近い」です。 どうしてもやりたい場合 ①index.html → フォームに入力した値をJavaScriptでsessionStorageに保存。 ②confirm.htmlでsessionStorageから値を読み込んで表示。 ③<form>でGoogleFormのformResponseにPOST(entry.xxxxxを使ってカスタマイズ) ただこちらはformResponseの公式ではない方法、またJavaScriptがオフのユーザーには動作しないといったデメリットがあるので注意です。

プラスjavascriptで実装!

それではjavascriptとを利用して実装方法に参ります。

index.html:入力ページを作成

まず入力ページではお問合せフォームを作成します。この時点ではGoogleFormのentry.xxxxの値は入れません。

<form id="form">
  <input type="text" name="category" placeholder="お問い合わせ種類">
  <input type="text" name="name" placeholder="お名前">
  <input type="email" name="email" placeholder="メールアドレス">
  <button type="submit">確認</button>
</form>

<script>
  document.getElementById('form').addEventListener('submit', function (e) {
    e.preventDefault();
    const formData = new FormData(e.target);
    for (const [key, value] of formData.entries()) {
      sessionStorage.setItem(key, value); // sessionStorage に保存
    }
    window.location.href = '/inquiry/confirm.html';
  });
</script>

確認ボタンが押されたら、formに入力された値をJavaScriptでsessionStorageに保存し、確認画面ページ /inquiry/confirm.htmlへ遷移します。

confirm.html:確認画面ページを作成

sessionStorageに保存された値をclass=”confirmBlock”へ流し込みます。

そして直下にあるformにGoogleFormのentry.xxxxx の値を入れてください。

<div class="confirmBlock">
  <p>お問い合わせ種類: <span id="category"></span></p>
  <p>お名前: <span id="name"></span></p>
  <p>メールアドレス: <span id="email"></span></p>
</div>

<form action="<https://docs.google.com/forms/d/e/1FAIpQLSc-.../formResponse>"
      method="POST" target="hidden_iframe" onsubmit="submitted = true;">
  <input type="hidden" name="entry.1234567890" id="categoryInput">
  <input type="hidden" name="entry.2345678901" id="nameInput">
  <input type="hidden" name="entry.3456789012" id="emailInput">
  <button type="submit">送信</button>
</form>

<iframe name="hidden_iframe" style="display:none;" onload="if(submitted) window.location='/inquiry/complete.html';"></iframe>

<script>
  // 表示とフォームへの挿入
  ['category', 'name', 'email'].forEach(key => {
    const value = sessionStorage.getItem(key);
    document.getElementById(key).textContent = value;
    document.getElementById(key + 'Input').value = value;
  });

  let submitted = false;
</script>

確認画面ページなのになぜここに入力フォームを置くのか…

それは、GoogleFormのformResponse をこのformで機能させるからです!

type="hidden" でform自体は非表示にします。

実際の確認画面がこちら

type="hidden"をなしにすると、ここにカスタマイズしたGoogleFormが隠れています!

送信ボタンが押されたら

<iframe name="hidden_iframe" style="display:none;" onload="if(submitted) window.location='/inquiry/complete.html';"></iframe>

送信完了画面ページ complete.html に遷移すればOKです!

流れとしてはindex.htmlで入力した値をconfirm.htmlにあるGoogleFormに渡して送信する。というものです。

カスタマイズのGoogleFormなので、集計スプレッドシートも使用できますし、GASで自動返信メールも送ることができます。

まとめ

Googleフォーム単体では実現が難しい“確認画面”も、JavaScriptを活用すれば柔軟に実装可能です。※まぁソースは丸見えなんですけどね💦

ちょっとしたカスタマイズで、見た目や使いやすさをぐっと引き上げられるので、一手間加えてみてはいかがでしょうか。

この記事を書いた人

マークアップを中心に、JavaScriptやReact、Next.jsを使ってフロントエンドの開発をやっています。自分が関わったサイトが無事に公開されると嬉しかったりします!趣味はギターを弾くこと。コードは書くのも弾くのもどっちも楽しいです!

ひらっち

フロントエンドエンジニア/2022年入社

安心のチーム体制とスピードのある対応力が自慢

リベロジックでは、ベテランスタッフが積極的にプロジェクトを推進するため、お客様から高く評価されています。
プロジェクトマネージャー、ディレクターをきちんとアサインし、プロジェクト全体をスムーズに進行することを心掛けています。 不必要なフルコミットでのコスト増加を防ぎ、適材適所にリソースを配分するスタイルで、業務内容の把握から見積作成/提出の速さにも定評があります。

当社はSES的な常駐業務等は積極的に行っておりませんので予めご了承ください。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webexなど、ほぼすべての主要なプロジェクト管理ツールやチャットツールをご利用いただけます。

Webのお悩みご相談ください。

ケーススタディ