1

私は最近、Google Docs スプレッドシートを使い始め、シートでスクリプトを作成しようとしています。ある特定のシートで、ユーザーにカスタム ダイアログ ボックスを表示したかったのですが、それができました。

ここで、ダイアログ内のいくつかのテーブル行をクリック可能にしたいと考えています。私は仕事をするはずのコードを書きましたが、Caja は私が書いたコードを削除しているようです。

コードの簡略化されたバージョン (まだ問題があります):

function showSkillsForCurrentLevel() {
  var html, out, app;

    html = '<div>Text. Yay!</div>'
    + '<script>'
    + '(function(){'
    + '    "use strict";'
    + '    var toggleFinished = function toggleFinished(){'
    + '            this.classList.toggle("finished");'
    + '        },'
    + '        rows,'
    + '        i = 0;'
    + '    rows = document.getElementsByClassName("skill-leveling").getElementsByClassName("finishable");'
    + '    if (rows.length) {'
    + '        for (i = 0; i < rows.length; i += 1) {'
    + '            rows[i].onclick = toggleFinished;'
    + '        }'
    + '    }'
    + '}());'
    + '</script>';  
    out = HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.NATIVE).setTitle('Leveling Plan').setWidth(400).setHeight(400);
    app = SpreadsheetApp.getActiveSpreadsheet();
    app.show(out);
};

表示されたダイアログに表示されるのは次のとおりです。

<caja-v-body>
    <div>Text. Yay!</div>
    <script></script>
</caja-v-body>

何らかの理由でCajaがコードを削除していると思いますが、Code.gsCajaサニタイズ後にスクリプトを適切に含める方法のドキュメントや例がどこにも見つからないようです.

他の人がこの問題に遭遇したと思います。誰かが解決策を共有してくれることを願っています。

TLDR バージョン:

によって作成されたダイアログに JavaScript を含めるにはどうすればよいHtmlService.createHtmlOutputですか?

4

1 に答える 1

2

私のアプローチは、次のようなダイアログを作成することです:

  var htmlOutput = HtmlService.createHtmlOutputFromFile("customdialog.html").setTitle("your title").setWidth(350);
  htmlOutput.setSandboxMode(HtmlService.SandboxMode.NATIVE);
  DocumentApp.getUi().showDialog(htmlOutput)

ダイアログの実際のコンテンツは、customdialog.html という別の HTML ファイルにあります。実装例は次のとおりです。

<html>
  <head>
    <script src="http://remoteserver/yourscript.js"></script>
    <script>... a local script</script>
  <body>
  <div>hello dialog</div>
  </body>
</html>

例が示すように、リモート サーバーから JavaScript を含めることもできます。このアプローチにより、なんとかjqueryを含めて、ダイアログでjqueryを使用することができました。

于 2014-01-19T14:01:01.337 に答える