Google apps script 是否可以使用HtmlService.createHtmlOutput包含客户端脚本,或者必须使用其他方法?

Google apps script 是否可以使用HtmlService.createHtmlOutput包含客户端脚本,或者必须使用其他方法?,google-apps-script,google-docs,google-caja,Google Apps Script,Google Docs,Google Caja,我最近开始使用GoogleDocs电子表格,并开始尝试在表格中编写脚本。在一个特定的工作表中,我想向用户显示一个自定义对话框,我已经成功地做到了这一点 现在,我想让对话框中的一些表格行可以单击。我写了一些应该可以完成这项工作的代码,但是Caja似乎正在删除我写的代码 代码的简化版本(仍然存在问题): 函数showSkillsForCurrentLevel(){ var html、out、app; html='Text.Yay!' + '' +“(函数(){” +“严格使用” +'var togg

我最近开始使用GoogleDocs电子表格,并开始尝试在表格中编写脚本。在一个特定的工作表中,我想向用户显示一个自定义对话框,我已经成功地做到了这一点

现在,我想让对话框中的一些表格行可以单击。我写了一些应该可以完成这项工作的代码,但是Caja似乎正在删除我写的代码

代码的简化版本(仍然存在问题):

函数showSkillsForCurrentLevel(){
var html、out、app;
html='Text.Yay!'
+ ''
+“(函数(){”
+“严格使用”
+'var toggleFinished=函数toggleFinished(){'
+'this.classList.toggle(“finished”);'
+ '        },'
+“行,”
+“i=0;”
+'行=文档.getElementsByClassName(“技能提升”).getElementsByClassName(“可完成”);'
+'if(rows.length){'
+'对于(i=0;i
我在显示的对话框中得到的是:

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

文本。耶!
我假设Caja出于某种原因正在剥离代码,但我似乎找不到任何文档或示例,说明如何在
code.gs
中正确地包含脚本,以便它们在Caja清理后保持完整

我想其他人也遇到过这个问题,我希望有人能分享一个解决方案

TLDR版本:


如何在由
HtmlService.createHtmlOutput
创建的对话框中包含JavaScript?

我的方法是创建如下对话框:

  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包含在该方法的对话框中。

虽然我可以理解您的方法是有效的(+1),但是否有任何文档表明我问题中列出的方法不起作用,或者说明如何在动态HTML中包含脚本?不幸的是,没有。当我注意到你的问题时,我正在处理这个问题,所以我将它原样分享。您似乎遇到了一个CAJA问题,您使用的javascript一定有不安全的地方。
<html>
  <head>
    <script src="http://remoteserver/yourscript.js"></script>
    <script>... a local script</script>
  <body>
  <div>hello dialog</div>
  </body>
</html>