0

我正在尝试将一些 JavaScript 嵌入到作为 Web 应用程序运行的 Google Apps 脚本的输出中,但我在输出中找不到我的脚本标签或 jQuery 加载的任何证据,所以我认为它正在被剥离我猜是卡哈出的。

我通过从文件创建 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>

H3 标签输出中,但没有出现脚本标签,没有弹出警告框并且 jQuery 未定义。

我在Caja 操场上尝试了这段代码,它似乎有效。所以我认为我一定是错误地插入了javascript,或者遗漏了一些明显的东西。

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

4

2 回答 2

0

我对 Apps 脚本不是很熟悉,但看起来您正试图在同一页面中混合 Ui 服务 ( add, ) 和 Html 服务。createHTML这不受支持 - 您必须为整个页面选择一个或另一个。


关于故障排除的附注:Caja从不插入您在 DOM 中编写的脚本(这样做会破坏沙箱)。不过,在NATIVE沙盒模式下,您可能会看到<script>内容为空或存根的元素。因此,没有脚本本身并不表示有问题。

于 2013-07-23T16:55:13.993 回答
0

根据 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>

这让我觉得也许我可以使用这种方法来输出任意 HTML,而无需全部编写代码,但我离题了。

这将我引向该app.createHTML([String])方法,并且根据此处的文档HTML 小部件实际上不能包含<script>标签。所以这就是他们被剥离的地方。事实证明我应该阅读手册。多么尴尬。

我能想到的两种可能的解决方案是;

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

我将从 clientHandler 方法开始。

于 2013-07-24T09:23:42.597 回答