2014-12-05 40 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