HtmlService を使用すると HTML を提供できますが、ページを「ホスト」するわけではなく、Apps Script プロジェクト内のさまざまな html ファイルに URL で直接アクセスすることはできません。代わりに、Web アプリには公開時に URL があり、それが唯一の URL です。
スクリプトとは別のページを提供し、それらを html ファイル リンクと同様に動作させる方法を次に示します。
doGet()
関数が呼び出されるとイベントが渡され、それを利用して、提供するページを示すことができます。Web アプリ ID が<SCRIPTURL>
の場合、特定のページを要求する URL とクエリ文字列は次のようになります。
https://script.google.com/macros/s/<SCRIPTURL>/dev?page=my1
テンプレート化された HTML を使用して、必要な URL + クエリ文字列をその場で生成できます。ではdoGet()
、クエリ文字列を解析して、提供するページを決定するだけです。
スクリプトは次のとおりです。2 つのサンプル ページには、ページ間を切り替えるボタンが含まれています。
Code.gs
/**
* Get the URL for the Google Apps Script running as a WebApp.
*/
function getScriptUrl() {
var url = ScriptApp.getService().getUrl();
return url;
}
/**
* Get "home page", or a requested page.
* Expects a 'page' parameter in querystring.
*
* @param {event} e Event passed to doGet, with querystring
* @returns {String/html} Html to be served
*/
function doGet(e) {
Logger.log( Utilities.jsonStringify(e) );
if (!e.parameter.page) {
// When no specific page requested, return "home page"
return HtmlService.createTemplateFromFile('my1').evaluate();
}
// else, use page parameter to pick an html file from the script
return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate();
}
my1.html
<html>
<body>
<h1>Source = my1.html</h1>
<?var url = getScriptUrl();?><a href='<?=url?>?page=my2'> <input type='button' name='button' value='my2.html'></a>
</body>
</html>
my2.html
<html>
<body>
<h1>Source = my2.html</h1>
<?var url = getScriptUrl();?><a href='<?=url?>?page=my1'> <input type='button' name='button' value='my1.html'></a>
</body>
</html>