質問: tmphtml.replace(/%usernum%/g,"UserName"); return HtmlService.createTemplate(tmphtml).evaluate() .setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle(title); } ``` Logger.logは、デバッグ用に入れました。 ログの出力結果は先にも述べましたが、 ``` Number001UserName <?!= include("form"); ?> ``` のようになっていました。 スプレッドシートから取得したデータをもとにusernameとusernumを動的に変化させる必要があったため、 1. form.htmlのソースを文字列としてtmphtmlに読み込む 2. tmphtmlの%username%と%usernum%を置換する 3. 文字列tmphtmlをもとにHtmlテンプレートを作る 4. returnでevaluate()して表示 のように回りくどくしています。 (そもそもここの部分がスマートに解決できるならそれが一番いいのですが...) ### 試したこと とりあえず、上記工程の1でhtmlソースを吸い出した時点でエスケープ状態で取得されているということが分かったので、フォームを置く場所に"%form%"などと書き、工程2の置換の時に"%form%"→"!= include('form'); ?>"とすることで暫定的に解決はしました。ただ、結局htmlを吸い出す時点でエスケープされる理由がよくわからないので、そこをご教授願いたいです。(そもそもこれは仕様?) お知恵を貸していただきたいのは、 * htmlソースを吸い出すときに小なり記号がエスケープされる理由 * そもそも吸い出して書き換えてevaluateなどという回りくどい策をとらずにコード.gs内で動的に変わる変数の値ををhtml側に渡せるのか の二点です。よろしくお願いします。
回答: >htmlソースを吸い出すときに小なり記号がエスケープされる理由 こちらは理由はわかりませんが、そういう仕様のようですね。 >そもそも吸い出して書き換えてevaluateなどという回りくどい策をとらずにコード.gs内で動的に変わる変数の値ををhtml側に渡せるのか HTMLに値を渡すためには下記のようにします。 ``` //コード.gs function doGet() { var page = HtmlService.createTemplateFromFile('index'); // HTMLへ値の引き渡し page.userNo = "Number001"; page.userName = "UserName"; return page.evaluate(); } ``` ``` = userNo ?>= userName ?> != HtmlService.createHtmlOutputFromFile('form').getContent(); ?> ```