creative-account
@creative-account

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASでメッセージの受け取り

GASでメッセージを受け取れるようにしたい

Webでお問い合わせフォームを作りたいと思っているのですが、PHPが実行できるサーバーを用意できません。
(今は input だけどあとで textarea に変えます)
ページはGitHubPagesで公開しようと思っているのですが、サーバーサイド言語は使用できないとのこと。
そこで、GASとGoogleSpreadsheetで受け皿を作ったのですがエラーで動きません。
方法は後述しますが、URLに直接指定した場合は問題なく動きました。ページ内から送るとエラーが出ます。
作り方はこれを参考にしました。
ラムダ技術部 さん
https://youtu.be/hIrxZv1CLxk

発生している問題・エラー

FireFox コンソールより

クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、https://script.google.com/macros/s/AKfycbyZuGcIYLr2krajDEETEirS47iMxk1W3dJKSzAmZ2EpQLKdk7ZfD1e0JLkDMaQnOaih/exec?q= にあるリモートリソースの読み込みは拒否されます (理由: CORS ヘッダー ‘Access-Control-Allow-Origin’ が足りない)。ステータスコード: 302

クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、https://script.google.com/macros/s/AKfycbyZuGcIYLr2krajDEETEirS47iMxk1W3dJKSzAmZ2EpQLKdk7ZfD1e0JLkDMaQnOaih/exec?q= にあるリモートリソースの読み込みは拒否されます (理由: CORS 要求が成功しなかった)。ステータスコード: (null)

Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource. 

該当するソースコード

function doGet(e) {
const spreadSheetByActive = SpreadsheetApp.getActive();
const sheet = spreadSheetByActive.getActiveSheet();
sheet.appendRow([e.parameter.q]);
const output = ContentService.createTextOutput();
output.setMimeType (ContentService.MimeType.JSON);
output.setContent(e. parameter.q);
return output;
}
<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <input class="gFLyf" type="text" name="" value="" onkeydown="fetch('https://script.google.com/macros/s/AKfycbyZuGcIYLr2krajDEETEirS47iMxk1W3dJKSzAmZ2EpQLKdk7ZfD1e0JLkDMaQnOaih/exec?q=' + document.querySelector('.gFLyf').value)">
  </body>
</html>

自分で試したこと

クラスがあっているか確認した。
PHPなしで使えるフォームサービスというのがあるみたいだが使いたくない。

0

4Answer

動画を投稿したものです。

実際に動作確認まではできていませんが、軽く確認したところ怪しいスペースがありましたので、スクリプト実行時のエラーがCORSエラーとしてレスポンスされているのではないかと思いました。
具体的には下記をご確認ください。

output.setContent(e. parameter.q);
output.setContent(e.parameter.q);

また、動画でもお伝えしているのでご理解はいただけていると思いますが、念の為注意事項も再掲しておきます。
スライド3.png

2Like

@_y_s 様へ

同一の質問者によるものと思われるこちらのteratailのページをご覧頂けませんでしょうか。

あちらでは不審な内容を察してか回答はなく低評価が付けられるのみに留まっています。どうか適切にご対応頂ければと存じます。


ご理解いただき感謝申し上げます。

0Like

Comments

  1. これでテストしてからやってみようかなと思って。
    あとは、
    <textarea></textarea>
    <button>送信</button>
    で出来るなら、やりたくて。
    できるんですか!?

この時は「社内で不正監視のため」などと言っていたのがいつの間に「お問い合わせフォームを作りたい」に変わったんですか?

先日、YouTubeでこのような動画を見つけました。
【注意】偽サイト作るのちょろすぎて草
社内で不正監視のため、上記のようなシステムを作成したいのですが上手く動作せず困っております。
スプレッドシートの作成→スクリプトの作成→デプロイの作成→HTML編集を以下に記載していますの>で、どこが間違っているのかご教授頂けると幸いです。
==========スクリプト==========
function doGet(e) {
const spreadSheetByActive = SpreadsheetApp.getActive();
const sheet = spreadSheetByActive.getActiveSheet();
sheet.appendRow([e.parmeter.q]);
const output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(e.parmeter.q);
return output;
}

0Like

Comments

  1. あ~それ別の人ですね
    同じこと考える人っているんですね
    なんかすいません

@mouseofmicky様からのご指摘に従い、回答を削除いたしました。

性善説を取って回答しましたが、その後の質問者様の対応が不審だったためです。失礼いたしました。

0Like

Your answer might help someone💌