24

ScriptDbConsole.html から legend.html にリンクすると、次のエラー メッセージが表示されます。

申し訳ありませんが、リクエストしたファイルは存在しません。アドレスを確認して、もう一度お試しください。

これは通常、通常の環境では機能しますが、ここではそうではないと思います。script.google.com にあります。

script.google.com プロジェクトで新しい .html ファイルを作成すると、他のファイルと同じ場所にファイルが作成されるので、このコードは実際に正しく動作するはずですか? ScriptDbConsole.html から legend.html を開くにはどうすればよいですか?

<a href='legend.html' target='_blank'>Open in new window</a>
4

2 に答える 2

57

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>
于 2013-05-22T16:56:49.273 に答える