2014-12-05 2 views
0

최근 Google Webapp로 webapp를 다시 빌드하고 싶습니다. 내 js 라이브러리의 일부가 Google 응용 프로그램 스크립트로 붙여 넣을 때 작동하지 않는 것을 발견했습니다. 실패의 주요 원인은 javascript가 실행될 때 일부 dom 함수가 누락되었습니다.일부 DOM 기능이 Google HTML 서비스에서 누락되었습니다.

나는 경우, 그러나, 아래의 문제 난 그냥 파이어 폭스, 나는이 얻을 수있는 기능 중 하나를 사용하여이 페이지를로드

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

,

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

을 보여주기 위해 예를했다 이 페이지를 Google htmlService로로드하면 위의 함수가 누락되었습니다.

'샌드 박스'환경에서 실행되는 Google 스크립트를 알고 있지만 내 응용 프로그램이 '기본'모드에서 실행되는지 확인했습니다. Google 스크립트에서 dom elelemts의 사용을 제한하는 다른 구성이 있는지 궁금합니다. 아니면 Google은 단순히 모든 것을 지원하지 않습니까?

+0

도움이 될지 모르겠지만이 문서를 보았습니다. [Google 문서 - javascript 제한] (https://developers.google.com/apps-script/guides/html/restrictions#javascript) –

+0

HTML 스크립트 태그의 함수 인'window.myFunction = function() {...};'에이 구문을 사용하고'myFunction'을 호출하여 함수를 실행하십시오. –

답변

1

마찬가지로 @Sandy는 언급했듯이 HTML 서비스 "sanitizes"은 Google Caja를 사용하여 클라이언트 측에서 실행될 모든 코드입니다. EMULATEDNATIVE의 두 가지 모드가 있지만 두 경우 모두 코드가 여전히 소독됩니다. 차이점은 NATIVE 모드에서주의해야한다면 코드가 반드시 다시 작성되지는 않는다는 것입니다. 확실히 그가 게시 한 링크를 확인하십시오.

HTML 서비스로 작업하는 동안 문제가 발생하면 Caja Playground을 사용하면 위생 처리 된 내용에 대한 자세한 정보를 얻을 수 있습니다.

+0

놀이터에 연결해 주셔서 감사합니다. 나는 약간의 시간 동안 googled했다. 주된 이유는 Google이 DOM 요소에 대한 몇 가지 제한 사항을 적용한다고 생각합니다. 그들이 iframe에서했던 것처럼. Google에서 인용 한 - "... some embed, iframe 및 object 요소는 기술적으로 지원되지만 내용은 심각하게 제한되며 실제적으로 이러한 요소는 사용할 수 없습니다 ...." –

+0

물론입니다. Caja에는 많은 것들에 제한이 있습니다. 나는 이러한 제한이 모두 잘 설명되어 있음을 발견하지 못했지만, 나는 보통 Caja Playground와 약간의 상식을 사용하여 문제가 무엇인지 결정할 수 있습니다. – John

관련 문제