2012-11-07 7 views
1

Google 사이트 도구 및 다른 웹 사이트에 포함하기 위해 GAS 코드 샘플을 준비하려고합니다. 저는 HtmlService.createHtmlOutput 및 HtmlService.createTemplateFromFile() 및 template.evaluate(). getContent()를 사용하여 Google 애플리케이션 스크립트의 내용에 대한 html 버전을 제공합니다. 그것 모두는 this post에 따라 잘 작동합니다.Google Apps Script htmloutput의 caja sanitization이 특정 문자열에서 실패하는 이유

이제 prettyify.js를 사용하여 코드를 가장 좋아합니다. 임 embedded in caja 버전을 사용하고 거의 작동합니다. 그러나 코드에서 prettified 특정 메서드 이름을 htmlservice에서 오류가 throw됩니다.

게스트 생성 객체 객체의 Untaming이 지원되지 않습니다. 작동하지 문자열을 기대 :

는 특히,이 텍스트가 성공적으로 prettified이다 PLN,

function xisItHtml (e) { 
    return (e.parameter.hasOwnPropertu('template')) ; 
} 

function xisItHtml (e) { 
    return (e.parameter.hasOwnProperty('template')) ; 
} 

이 때문에 특정 방법 (이상한 것이 오류를 발생하는 반면 이 코드는 실행되지 않고 단지 prettified), caja sanitation이 불평을 일으킨다.

템플릿의 코드는 내가 꽤 많이 난처한 상황에 빠진거야 그냥이

$(document).ready(function() { 
// any jQueryness can happen here... 
    try { 
    prettyPrint(); 
    } 
    catch(err) { 
    alert("failed prettification " + err); 
    } 
}); 

입니다. 어떤 아이디어?

+0

작업 예 모두의 에러를 던지는 사람은 잘못 철자 hasOwnProperty를 가지고 작동하는 동일한 – mhawksey

+0

한 모습. 철자를 올바르게 입력하면 실패합니다. html body에 코드가 삽입되었는지 검사 할 수 있습니까? – bruce

+0

Martin. caja 예제를 GAS html 템플릿에 복사하고 실행하면 예제 1이 작동합니다. 다른 2 명은 그렇지 않습니다. – bruce

답변

1

GAS의 html 출력에 .toString() 또는 .hasOwnProperty()가 들어있는 미리보기가있는 텍스트를 삽입하면 오류가있는 것으로 보입니다. 문제를 일으킨 다른 텍스트를 찾을 수는 없지만 더 많은 텍스트가있을 수 있습니다. 내 해킹은 단지 prettification하기 전에 텍스트를 변경하고 나중에 다시 변경했다.

$(document).ready(function() { 
    // any jQueryness can happen here... 
    var thingsThatScrewUp = [ 'toString', 'hasOwnProperty'],t; 

    $('.pretty').each(function(i,elem) { 
     var c = $(elem).text() ; 
     // disguise 
     for (var i = 0 ; i < thingsThatScrewUp.length ; i++) { 
     c = c.replace(new RegExp("." + thingsThatScrewUp[i], 'g'),".sandw_" + i + "_ch"); 
     } 
     try { 
     t = prettyPrintOne(c); 
     } 
     catch (err) { 
     $('#report').html(err + c); 
     } 
     // undisguise 
     for (var i = 0 ; i < thingsThatScrewUp.length ; i++) { 
     t = t.replace(new RegExp("sandw_" + i + "_ch", 'g'),thingsThatScrewUp[i]); 
     } 
     $(elem).html("<pre class='code pretty prettyprint'>" + t + "</pre>"); 
     }); 
     $('#working').html('Module:'); 
    }); 

는 여기 Working version

+0

'해당 작업을 수행하려면 승인이 필요합니다 .' – CodyBugstein

0

당신이 prettyifier를 호출하는 방법이 될 수 있습니다. 여기에있다 an example which appears to render correctly in the Caja Playground

+0

https://script.google.com/a/macros/mcpher.com/s/AKfycbyggMg-jIPgkfiyXSKsegIBH7V6p2VEU9lujoXDb3XM2k6mCFQ/exec?module=small2&template=test와 https://script.google.com이 아닌 작품이 있습니다. /a/macros/mcpher.com/s/AKfycbyggMg-jIPgkfiyXSKsegIBH7V6p2VEU9lujoXDb3XM2k6mCFQ/exec?module=small&template=test. 유일한 차이점은 철자 된 텍스트 중 하나입니다. 코드는 https://script.google.com/d/1DFV0kDfrj3sF0M2gJPUAeDeT9WaI3RJLVg3ESJU7JJO6UCB_a0oLHq/edit – bruce

+0

입니다. 내 사례가 caja 놀이터에서 정상적으로 컴파일되는 동안 Apps Script 문제 인 것 같아요. 예제가 실행될 때와 같은 오류가 발생합니다. 코드는 웹 앱으로 게시됩니다. https://script.google.com/macros/s/AKfycbzp0KrDAXWhsoV9Z6d_UgmTzwiCe4akqt6K8KsFP5F8aeSUIgY/exec – mhawksey

관련 문제