1

HtmlService経由でGoogleアプリスクリプトからGoogleクロージャライブラリ関数にアクセスすることは可能ですか? Google スクリプトの html ファイルは、クロージャ ライブラリに関連するものを除外しているようです。

プロジェクト: HtmlService を使用して、Google アプリ スクリプト内から Google Closure ライブラリの DOM 操作ユーティリティを調べています。これをスタンドアロンの Web アプリとして実行するつもりです。

クロージャー関数は、ローカル クライアント環境からブラウザーに直接読み込まれると機能しますが、HtmlService ユーティリティを介して GAS アプリから挿入されると機能しません。

GASで使用しているコードは次のとおりです。

htmlファイル

<html>
  <head>
  <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
  <script>
    goog.require('goog.dom');
    function c_sayHi() {
      var newHeader = goog.dom.createDom('h1', {'style': 'background-color:#EEE'},'Hello world!');
      goog.dom.appendChild(document.body, newHeader);
    }
  </script>
  </head>

  <script>
    function c_updateButton(date, button) {
      button.value = "clicked at " + date;
    }
  </script>

  <body onload="c_sayHi()">
    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>

    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>
  </body>
</html>

Google スクリプト ファイル

function s_getCurrentDate() {
  return new Date().toString();
}

function doGet(e) {
  return HtmlService.createTemplateFromFile('hello').evaluate();
}

クライアント側の関数には c_ を、サーバー側の関数には s_ をプレフィックスとして付けました。これをウェブアプリとして実行すると、

  1. 関数 c_sayHi は効果がありません。呼び出されているかどうかもわかりません。

  2. 関数 s_getCurrentDate と c_updateButton は、Google のドキュメントhttps://developers.google.com/apps-script/html_serviceで説明されているように正常に動作します。

上記で試みたように、Web アプリからクロージャ ライブラリを動作させる方法はありますか?

4

2 に答える 2

3

ここにいくつかのことがあります -

  1. すべての .gs ファイルは、サーバー側で実行される JavaScript です。したがって、DOM は実際には関係ありません。
  2. HtmlServiceでコードを返すことにより、クライアント側の JavaScript を実行できます。これがあなたがやりたいと私が信じていることです。ただし、jQuery は、このアプローチで最もサポートされているライブラリです。閉鎖は機能する可能性がありますが、チームはそのライブラリに対して具体的にテストしていません。
于 2012-11-20T21:38:06.937 に答える
2

問題は、Closure の依存関係構造がウィンドウ ロード イベントの前に実行されていることです。それ以外の場合は機能しません。そのため、require ステートメントと provide ステートメントは、ウィンドウが読み込まれる前に処理されます。HTML サービスを介してそれらを挿入すると、必要な段階とは異なる段階でそれらの実行が強制され、すべてが失敗します。

COMPILED Closure Library ソースを使用する場合は、Closure の実行に問題はありません。Compiler と Builder を使用して Closure を適切に機能させる方法を学びます。また、遅延読み込みを使用して HTML サービスをシミュレートすることもできます。

これにより、onclick、onload、または何でも好きなように、javascript を動的にロードすることができます。これは遅延読み込みと呼ばれ、すべての大規模な Web アプリケーションの標準的な方法として使用されます。Gmail または Facebook をブラウジングするときに、Firebug の [ネットワーク] タブを監視します。

Arun Nagarajan の言うとおりです。jQuery の方が簡単なソリューションです、幅、規模、速度が必要な適切な処理を行う場合、jQuery は子供向けのおもちゃです。

于 2012-11-24T20:25:05.217 に答える