問題タブ [google-caja]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-apps-script - HtmlService.createHtmlOutput を使用してクライアント側スクリプトを含めることは可能ですか、それとも別の方法を使用する必要がありますか?
私は最近、Google Docs スプレッドシートを使い始め、シートでスクリプトを作成しようとしています。ある特定のシートで、ユーザーにカスタム ダイアログ ボックスを表示したかったのですが、それができました。
ここで、ダイアログ内のいくつかのテーブル行をクリック可能にしたいと考えています。私は仕事をするはずのコードを書きましたが、Caja は私が書いたコードを削除しているようです。
コードの簡略化されたバージョン (まだ問題があります):
表示されたダイアログに表示されるのは次のとおりです。
何らかの理由でCajaがコードを削除していると思いますが、Code.gs
Cajaサニタイズ後にスクリプトを適切に含める方法のドキュメントや例がどこにも見つからないようです.
他の人がこの問題に遭遇したと思います。誰かが解決策を共有してくれることを願っています。
TLDR バージョン:
によって作成されたダイアログに JavaScript を含めるにはどうすればよいHtmlService.createHtmlOutput
ですか?
gwt - Google ドライブの Caja セキュリティ、GWT に準拠していませんか?
GWT
Google ドキュメントにサイドバーとして埋め込みたい。単純なjquery
Web ページの場合、すべて正常に動作しますが、最小の GWT アプリを埋め込むと表示されません。GWT アプリを最小限に減らしました。
この GWT アプリケーションを次のように含めます。
code.gs で
sidebar.html で
前述のように、HTML ファイルに jquery を含め、jquery ステートメントでリモート スクリプトを呼び出すことは、このアプローチでうまく機能します。
現在、Google ドキュメントで webapp を実行しています。javascript と HTML は CAJA-sanitizedです。ここで読んだ内容から理解できます: https://developers.google.com/apps-script/guides/html/restrictions。次に、にSANDBOX mode
設定できる があります NATIVE or EMULATED
。両方試しました。
setSandboxMode() メソッドを使用して、Caja の 2 つのバージョンから選択できます。NATIVE モードは、EMULATED モードよりも制限が少なく、通常は高速に実行されます。対照的に、EMULATED モードは、ECMAScript 5 strict モードをサポートしていない古いブラウザー、特に Internet Explorer 9 で動作する可能性が高くなります (Internet Explorer 8 以前を含む非常に古いブラウザーは通常、HTML サービスと互換性がありません)。
とにかく、何も表示されず、以下のログから、エラーは次のとおりです。
オブジェクト [object Object] にはメソッド 'replace' がありません
サイドバーに埋め込むために、アプリケーション ウィジェットの一部を再利用できれば素晴らしいと思います....
誰か光を当てることができますか??
どうも
参考までに、コンソール出力:
サンドボックス モード: ネイティブ 904833574-maestro_htmlapp_bin_maestro_htmlapp.js?lib=MK7wi1l9-fBV4ffZJJ9h74zcqOPkxWgv_:192
オブジェクト [object Object] にはメソッド「replace」がありません 904833574-maestro_htmlapp_bin_maestro_htmlapp.js?lib=MK7wi1l9-fBV4ffZJJ9h74zcqOPkxWgv_:66
javascript - Google Caja を使用してユーザー提供の Javascript を実行する
公式の例では、 をラップするだけのcaja.jsファイルを使用iframe
して、caja コンパイル サービスをホストしているサーバーから URL をロードし、そのサーバーが何らかの URL から入力を取得しているようです。それに関連する API は、こちらから入手できます。
ただし、私が本当に望んでいるのは、次のように、ユーザーが提供する Javascript を安全に (そして繰り返し) 実行することです。
これを直接行う方法はありますか?ここのコードにはコンパイラがあります。それを使用してコードをコンパイルし、エミュレートされたコンテキスト内で実行できないのはなぜですか? ブラウザで安全なコンテキストを取得する唯一の方法はiframe
? もしそうなら、 を使用しiframe
て、外部 URL から取得することなく、特定のソース コードを直接実行する方法はありますか?