Google Apps脚本Web App serverHandler输出中缺少嵌入式Javascript

Google Apps脚本Web App serverHandler输出中缺少嵌入式Javascript,javascript,google-apps-script,google-caja,Javascript,Google Apps Script,Google Caja,我试图将一些JavaScript嵌入作为web应用程序运行的Google应用程序脚本的输出中,但我在输出中找不到任何关于我的脚本标记或jQuery加载的证据,因此我认为它被Caja剥离了 我通过从文件创建HTMLOutputObject来添加JavaScript,如下所示: app.add(app.createHTML(HtmlService.createHtmlOutputFromFile("order_form_javascript").getContent())); 这里值得一提的是,j

我试图将一些JavaScript嵌入作为web应用程序运行的Google应用程序脚本的输出中,但我在输出中找不到任何关于我的脚本标记或jQuery加载的证据,因此我认为它被Caja剥离了

我通过从文件创建HTMLOutputObject来添加JavaScript,如下所示:

app.add(app.createHTML(HtmlService.createHtmlOutputFromFile("order_form_javascript").getContent()));
这里值得一提的是,javascript是以这种方式添加到附加到listBox更改事件的serverHandler中的——不是在初始doGet()函数中——我不确定这是否会产生影响

order_form_javascript.html文件的内容为:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<h3>Javascript!</h3>
<script type="text/javascript">
alert ("script ran");
$(function() {
  alert ("function ran");
  $('.order_table tr:hidden').show();
});

</script>

Javascript!
警报(“脚本运行”);
$(函数(){
警报(“函数运行”);
$('.order_table tr:hidden').show();
});
H3标记在输出中,但没有出现脚本标记,没有弹出警告框,jQuery未定义

我在上尝试了这个代码,它似乎起了作用。所以我认为我一定是错误地插入了javascript,或者遗漏了一些明显的东西


提前感谢您提供的任何建议。

我对应用程序脚本不太熟悉,但看起来您正在尝试将Ui服务(
add
createHTML
)和Html服务混合在同一页面中。这是不支持的-您必须为整个页面选择一个或另一个



关于疑难解答的旁注:Caja从不在DOM中插入您编写的脚本(这样做会破坏沙箱)。但在中,您可能会看到
元素的内容为空或存根。因此,缺少脚本本身并不表示存在问题。

根据Kevin Reids的提示,Caja无论如何都不可能显示脚本标记,因为这会破坏沙箱,而且HtmlService和UiService在同一脚本中可能不兼容,我将代码更新为以下内容:

var js = HtmlService.createHtmlOutputFromFile("order_form_javascript").getContent();

Logger.log(js); //check that HtmlService generates the script properly.

app.add(app.createHTML(js));
查看日志,我可以清楚地看到HtmlService正在逐字返回我的HTML文件的内容:

[13-07-24 10:02:28:879 BST] <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<h3>Javascript!</h3>
<script type="text/javascript">
alert ("script ran");
$(function() {
  alert ("function ran");
  $('.order_table tr:hidden').show();
});

</script>
[13-07-2410:02:28:879英国夏令时]
Javascript!
警报(“脚本运行”);
$(函数(){
警报(“函数运行”);
$('.order_table tr:hidden').show();
});
这让我想到,也许我可以使用这个方法输出任意HTML,而不必全部用代码编写,但我离题了

这让我想到了
app.createHTML([String])
方法,根据它,HTML小部件实际上不能包含
标记。这就是他们被剥夺权利的地方。原来我应该读一下手册。真尴尬

我能想到的两种可能的解决办法是:

  • 使用HtmlService而不是UiService重新编写我的web应用程序,我认为这将允许在项目中使用html文件中的更多任意html和脚本
  • 由于我的JavaScript将是事件驱动的,而且非常简单,因此我还可以执行必要的操作并继续为我的web应用程序使用UiService

我将从clientHandler方法开始。

谢谢你的提示Kevin;你激励我正确地看待我正在做的事情,并引导我找到答案。