1

我正在尝试准备 GAS 代码示例以嵌入 Google 协作平台和其他网站。我使用 HtmlService.createHtmlOutput 和 HtmlService.createTemplateFromFile() 和 template.evaluate().getContent() 来提供 google 应用程序脚本内容的 html 版本。根据这篇文章,这一切都很好。

现在我想使用 prettyify.js 美化代码。我使用嵌入在 caja中的版本,它几乎可以工作。然而,被美化的代码中的特定方法名称会从 htmlservice 引发错误。

不支持来宾构造对象对象的驯服。期望函数不是字符串:pln

具体来说,这段文字美化成功,

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

而这会引发错误

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

似乎特定的方法(奇怪,因为没有执行此代码,只是美化了),导致 caja sanitation 抱怨。

模板中的代码就是这样

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

我很难过。有任何想法吗?

4

2 回答 2

1

因此,当您将包含 .toString() 或 .hasOwnProperty() 的美化文本插入 GAS 中的 html 输出时,似乎出现了故障。我找不到任何其他导致问题的文本,但可能还有更多。我的技巧只是在美化之前更改文本,然后再将其更改回来。

$(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:');
  });

这是一个 工作版本

于 2012-11-07T19:29:22.647 回答
0

这可能是您调用美化器的方式。这是一个在 Caja Playground 中正确呈现的示例

于 2012-11-07T12:35:27.173 回答