为什么Google Apps脚本htmloutput的caja清理会在特定字符串上失败

时间:2012-11-07 12:06:26

标签: google-apps-script google-caja google-code-prettify

我正在尝试准备GAS代码示例以嵌入Google协作平台和其他网站。我使用HtmlService.createHtmlOutput和HtmlService.createTemplateFromFile()和template.evaluate()。getContent()来提供谷歌应用程序脚本内容的html版本。根据{{​​3}},一切正常。

现在我想使用prettyify.js来修饰代码。我使用版本this post,它几​​乎可以工作。但是,被修饰的代码中的特定方法名称会从htmlservice中抛出错误。

  

不支持guest虚拟机构造对象对象的调用。期待一个   函数不是字符串:pln

具体来说,这个文本成功地被美化了,

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

而这会引发错误

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

似乎特定的方法(奇怪,因为这些代码都没有执行,只是被美化),导致caja卫生设施抱怨。

模板中的代码就是这个

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

我很难过。任何想法?

2 个答案:

答案 0 :(得分:1)

因此,当您将包含.toString()或.hasOwnProperty()的经过修饰的文本插入到GAS中的htmloutput时,似乎会出现故障。我找不到任何导致问题的其他文字,但可能会有更多。我的黑客只是在美化之前改变文本并稍后再改变它。

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

答案 1 :(得分:0)

这可能是你调用prettyifier的方式。这是an example which appears to render correctly in the Caja Playground