我正在尝试将一些JavaScript嵌入到作为Web应用程序运行的Google Apps脚本的输出中,但我找不到任何有关我的脚本标记或输出中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>
输出中的H3标记 ,但没有出现脚本标记,没有弹出警告框,jQuery未定义。
我在Caja playground上尝试了这个代码,它似乎有效。所以我认为我必须错误地插入javascript,或者遗漏一些明显的东西。
提前感谢您提出的任何建议。
答案 0 :(得分:0)
我对Apps脚本并不熟悉,但看起来您正试图在同一页面中混合使用Ui服务(add
,createHTML
)和Html服务。这不受支持 - 您必须为整个页面选择一个或另一个。
关于故障排除的附注:Caja 从不插入您在DOM中编写的脚本(这样做会破坏沙箱)。在NATIVE
sandbox mode中,您可能会看到<script>
元素包含空或存根内容。因此,缺少脚本本身并不表示存在问题。
答案 1 :(得分: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])
方法,根据the documentation here, HTML小部件实际上不能包含<script>
标记。这就是他们被剥夺的地方。事实证明我应该阅读手册。多么尴尬。
我能想到的两种可能的解决方案是;
我将从clientHandler方法开始。