【Google app script】HtmlService.SandboxMode.IFRAMEに対応したい
受付中
回答 3
投稿
- 評価
- クリップ 2
- VIEW 2,760
前提・実現したいこと
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
hiro54さんへ
はじめまして。
デベロッパーツール等のコンソールも確認されましたでしょうか?
HtmlServiceの場合、動作がおかしい時にはコンソールも確認したほうが良いです。
Syntax Errorを吐き出したりしています。
押してもなにも起きない、ということはgoogle.script.run実行時にfalseになっているかもしれません。
withFailureHandler()を実装して確認したほうが良いと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
関係ないかもしれませんが、下記部分に ;
が無いのが気になります。
return output.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME) //←問題と思われる部分
また、'test' のHTMLにGASを含まないようにして表示できるか試してみてはいかがでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
既に2年経過しており、質問者の方も解決されているかもしれませんが、
他に、このスクリプトを使われていて、うまく動いていない方を発見しましたので、
こちらの回答にはなっていないと思いますが、一点、気付いた事を記させて頂きます。
まず、このURLにあるものを解説と全く同じ手順で制作してみましたが、
解説者さんのサンプルは動いているのにも係わらず、私の場合、送信ボタンが反応しませんでした。
何度も同じ手順で制作してみましたが、やはり、送信ボタンは全く反応しません。
そこで、「コード.gs」と「index.html」の中から、
index.htmlの中に書いてある「doAction(event)」という部分に着目しました。
文中、冒頭と文末に近い位置で出現します。
冒頭では、doAction(event)と書かれてあります。しかし、文末のonClickの中では、doAction(e)と書かれてあります。
これを、doAction(event)に統一してみたところ、動くようになりました。
あとは、必須項目チェック機能を追加すれば、いいものが出来そうな気がします。
現段階では、全ての項目が未入力でも、カレンダー登録出来てしまいます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/27 12:34
ReferenceError: e is not defined
onclick()
とエラーが出ていました。
ありがとうございます!
解決に向け、また動いてみたいと思います。
2016/05/27 14:08
スクリプトエディタのメニューより、表示 > 実行トランスクリプト を選択して頂ければ、実行ログが表示されます。
ログの中身を確認すれば、実行が無事終了した扱いになっているのか、途中でストップしたのかがわかります。
ストップした場合はどこでストップしたのかがわかりますのでその辺りを重点的に確認してみてください。
2016/06/03 12:23
IFRAMEモードでは必須です。
押してもなにも起きない、ということでしたのでHTMLは表示されている状態であるという認識でスルーしていましたが、念のための確認です。