2014-12-05 37 views
0

我最近想重新构建我的webapp作为谷歌webapp。当我将它粘贴为Google应用程序脚本时,我发现我的部分js库不工作。失败的主要原因是一些dom函数在运行javascript时丢失。谷歌HTML服务中缺少一些DOM功能

我做了一个例子来说明下问题,

<body> 
<input type='select' id='test'></input> 
<p id='output'></p> 
<body> 

<script> 
var dom = document.getElementById('test'); 
var outputText = ''; 
for(var i in dom) outputText += "<br>"+ i +": " + dom[i] + "</br>"; 
var out = document.getElementById('output'); 
out.innerHTML = outputText; 
</script> 

当我只是使用Firefox的功能,我可以得到的是一个加载该页面,

checkValidity: function checkValidity() { [native code] } 

但是,如果我通过google htmlService加载这个页面,上面的函数缺失。

我知道谷歌脚本运行在'沙箱'环境下,但我仔细检查了我的应用程序在'本地'模式下运行。我想知道是否有其他配置,限制在谷歌脚本中使用dom elelemts。或谷歌根本不支持所有这些?

+0

我不知道这是否有帮助,但您是否看过本文档:[Google文档 - javascript限制](https://developers.google.com/apps-script/guides/html/restrictions#javascript) – 2014-12-05 17:21:08

+0

最好在HTML Script标记中使用这个语法来实现函数:'window.myFunction = function(){...};'并通过调用'myFunction'来运行该函数。 – 2014-12-05 17:24:42

回答

1

正如@Sandy Good提到的那样,HTML服务“sanitizes”将使用Google Caja在客户端运行所有代码。有两种模式,EMULATEDNATIVE,但在任何一种情况下,代码仍被消毒;所不同的是,在NATIVE模式下,如果您小心,您的代码不一定会被重写。绝对检查他发布的链接。

如果您在使用HTML服务时遇到困难,可以使用Caja Playground,它可以为您提供有关已清理内容的更详细信息。

+0

感谢您与Playground的链接。我搜索了一段时间。我认为主要原因是Google对dom元素进行了一些限制。就像他们为iframe做的一样。引用google - “...一些尽管嵌入,iframe和对象元素在技术上得到了支持,但其内容受到严格限制;实际上,您不能使用这些元素....” – 2014-12-08 21:01:47

+0

绝对。 Caja有许多限制。我还没有发现这些限制都是有据可查的,但我通常可以使用Caja Playground和一些常识来确定有什么问题。 – John 2014-12-09 18:39:13