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

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

ただいまの
回答率

90.49%

  • Google Apps Script

    887questions

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

【Google app script】HtmlService.SandboxMode.IFRAMEに対応したい

受付中

回答 3

投稿

  • 評価
  • クリップ 2
  • VIEW 1,408

hiro54

score 3

前提・実現したいこと

http://ascii.jp/elem/000/000/894/894480/
上記URLのサンプルコードをベースにして、
予約システムを作成していました。

ところが、6月末を持って停止する機能があることから、
「HtmlService.SandboxMode.NATIVE」⇒「HtmlService.SandboxMode.IFRAME」に変更しました。
しかし、単純にコードを変更しただけだと、
正常に動作しないようです。
コードのリファレンスを眺めて試してはいるものの
解決できないため、投稿させていただきました。
よろしくお願いします。

発生している問題・エラーメッセージ

「予約」ボタンを押すと、予約しましたのメッセージが映るのですが、
今は、押してもなにも起きない状況です。
エラーコードも特にありません。

該当のソースコード

function doGet(e){
  var output = HtmlService.createTemplateFromFile('test');
  return output.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME) //←問題と思われる部分
}

function checkData(frm){
var tenpo = frm['tenpo'];
var myoji = frm['myoji'];
var tel1 = frm['tel1'];
var tel2 = frm['tel2'];
var tel3 = frm['tel3'];
var seki = frm['seki'];
var mailaddress = frm['mailaddress'];
var namae = frm['namae'];
var kazu = frm['kazu'];
var jikan = frm['jikan'];
var yoyakucourse = frm['yoyakucourse'];
var bikou = frm['bikou'];
var addtantou = frm['addtantou'];
var date1 = new Date(frm['date']);


Logger.log(date1);
var cal = CalendarApp.getCalendarById('xxxxxxxxxx@group.calendar.google.com');
var result = '';
var evts = cal.getEventsForDay(date1);


if (evts.length > 100){
var frmdaystr = date1.getYear() + '-' +  date1.getMonth() + '-' + date1.getDate();
var evtday = evts[evts.length - 1].getAllDayStartDate();
var evtdaystr = evtday.getYear() + '-' +  evtday.getMonth() + '-' + evtday.getDate();
Logger.log(evts.length);
Logger.log(frmdaystr);
Logger.log(evtdaystr);

if (frmdaystr == evtdaystr){
result ='申し訳ありません。その日は既に予約済みです。';
} else {

cal.createAllDayEvent(myoji + ' ' + namae + '様 / ' + kazu , date1,
{description:'▼' + myoji + ' ' + namae + '様 ' + kazu + ' ▼連絡先:' + tel1 + '-' + tel2 + '-' + tel3 + ' / ' + mailaddress + ' / ' + jikan + ' / ' + yoyakucourse + ' / ' + seki +' / ' + bikou + ' / ▼入力者:' + addtantou , guests:mailaddress});
result = date1.getYear() + "年" + (date1.getMonth() + 1) + 
"月" + date1.getDate() + '日に予約しました。';

}
} else {

cal.createAllDayEvent(myoji + ' ' + namae + '様 / ' + kazu , date1,
{description:'▼' + myoji + ' ' + namae + '様 ' + kazu + ' ▼連絡先:' + tel1 + '-' + tel2 + '-' + tel3 + ' / ' + mailaddress + ' / ' + jikan + ' / ' + yoyakucourse + ' / ' + seki +' / ' + bikou + ' / ▼入力者:' + addtantou , guests:mailaddress});
result = date1.getYear() + "年" + (date1.getMonth() + 1) + 
"月" + date1.getDate() + '日に予約しました。';

}

return result;
};

試したこと

課題に対してアプローチしたことを記載してください

補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

hiro54さんへ

はじめまして。
デベロッパーツール等のコンソールも確認されましたでしょうか?
HtmlServiceの場合、動作がおかしい時にはコンソールも確認したほうが良いです。
Syntax Errorを吐き出したりしています。

押してもなにも起きない、ということはgoogle.script.run実行時にfalseになっているかもしれません。
withFailureHandler()を実装して確認したほうが良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/27 12:34

    コンソールを確認してみました。
    ReferenceError: e is not defined
    onclick()
    とエラーが出ていました。

    ありがとうございます!
    解決に向け、また動いてみたいと思います。

    キャンセル

  • 2016/05/27 14:08

    もう1点だけ捕捉しておきますね。

    スクリプトエディタのメニューより、表示 > 実行トランスクリプト を選択して頂ければ、実行ログが表示されます。
    ログの中身を確認すれば、実行が無事終了した扱いになっているのか、途中でストップしたのかがわかります。

    ストップした場合はどこでストップしたのかがわかりますのでその辺りを重点的に確認してみてください。

    キャンセル

  • 2016/06/03 12:23

    テンプレートとしている test.html ですが、DOCTYPEから記述されていますか?
    IFRAMEモードでは必須です。

    押してもなにも起きない、ということでしたのでHTMLは表示されている状態であるという認識でスルーしていましたが、念のための確認です。

    キャンセル

0

関係ないかもしれませんが、下記部分に ; が無いのが気になります。

return output.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME) //←問題と思われる部分

また、'test' のHTMLにGASを含まないようにして表示できるか試してみてはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/27 12:14

    最後を閉じてみました。
    ありがとうございます!

    キャンセル

0

既に2年経過しており、質問者の方も解決されているかもしれませんが、
他に、このスクリプトを使われていて、うまく動いていない方を発見しましたので、
こちらの回答にはなっていないと思いますが、一点、気付いた事を記させて頂きます。

まず、このURLにあるものを解説と全く同じ手順で制作してみましたが、
解説者さんのサンプルは動いているのにも係わらず、私の場合、送信ボタンが反応しませんでした。
何度も同じ手順で制作してみましたが、やはり、送信ボタンは全く反応しません。

そこで、「コード.gs」と「index.html」の中から、
index.htmlの中に書いてある「doAction(event)」という部分に着目しました。
文中、冒頭と文末に近い位置で出現します。
冒頭では、doAction(event)と書かれてあります。しかし、文末のonClickの中では、doAction(e)と書かれてあります。
これを、doAction(event)に統一してみたところ、動くようになりました。

あとは、必須項目チェック機能を追加すれば、いいものが出来そうな気がします。
現段階では、全ての項目が未入力でも、カレンダー登録出来てしまいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    887questions

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