google
GoogleAppsScript
gas
GSuite
GoogleAppMaker

Google App Maker ー スクリプトから開いているURLを取得する方法

More than 1 year has passed since last update.

App Maker のスクリプトから開いているURLが欲しいなーと思ったときに調べた際のメモ。

そもそも App Maker ってなに?という人は、以下の記事を参照してください。
Google App Maker とは? 短期間で Web アプリケーション構築を可能にした理由

サーバーサイド(GAS)

ScriptApp.getService().getUrl()

〜execまでが欲しい場合はこれでよい。

クライアントサイド(JS)

google.script.url を使う

URLパラメータやハッシュ値ならこれでも取得できる

google.script.url.getLocation(function(location) {
  console.log(JSON.stringify(location)); // -> {"parameter":{},"parameters":{},"hash":"MessageCreate"}
});

window.parent.document.referrer を使う

※ 階層構造は変わる可能性があるので、この方法は得策ではない。
これが動かなくなるとアプリケーションとして成り立たなくなるような場合に使ってはいけない。

以下は調べたときに勉強になったのでメモ

App Maker の構造

App Maker は iframe が二重でかかっているので、それを加味して取得する必要がある。
作成した画面はふたつめの iframe に書かれる。

image.png

一番上で実行

window.location.href ->
"https://script.google.com/a/macros/howdylikes.jp/s/AKfycbxFNha8YfDQtgMk1wQOWd8TypvAw-WbDhpGWf1sg96e7VyD4icPElmUIA/exec"

ひとつめのiframeで実行

window.location.href ->
"https://n-3dz2ufoyafrtygsybc7tju6pst5of6wjjnxddji-0lu-script.googleusercontent.com/userCodeAppPanel"
window.document.referrer ->
"https://script.google.com/a/macros/howdylikes.jp/s/AKfycbxFNha8YfDQtgMk1wQOWd8TypvAw-WbDhpGWf1sg96e7VyD4icPElmUIA/exec"

ふたつめのiframeで実行

window.location.href
"https://n-3dz2ufoyafrtygsybc7tju6pst5of6wjjnxddji-0lu-script.googleusercontent.com/userCodeAppPanel"
window.document.referrer ->
"https://n-3dz2ufoyafrtygsybc7tju6pst5of6wjjnxddji-0lu-script.googleusercontent.com/userCodeAppPanel"
window.parent.document.referrer ->
"https://script.google.com/a/macros/howdylikes.jp/s/AKfycbxFNha8YfDQtgMk1wQOWd8TypvAw-WbDhpGWf1sg96e7VyD4icPElmUIA/exec"

おまけ

window.parent.parent.location.href だと origin が違うため怒られてしまう。

window.parent.parent.location.href ->
VM6063:1 Uncaught DOMException: Blocked a frame with origin "https://n-3dz2ufoyafrtygsybc7tju6pst5of6wjjnxddji-0lu-script.googleusercontent.com" from accessing a cross-origin frame.
    at <anonymous>:1:31