谷歌站点中嵌入谷歌应用程序脚本的新行?

时间:2014-10-30 14:41:03

标签: google-apps-script newline saml

我是个新手,所以可能有一些我很想念的东西......

此代码嵌入在我公司使用的Google网站中。

基本上,我所做的是创建一个文本框,我在SAML响应中过去,单击按钮,然后URL解码,然后base64解码字符串。这很有效(令人惊讶)。但输出只是XML的一长串。举例来说,在python中,我只是替换了“><”带有“> \ n<”的实例并且它对我来说格式足够好。 (我不需要真正的XML格式)

我在这里尝试了太多的东西,但要么我猜到的东西都不起作用,格式化不可读,它会切断文本而不会自动换行等等。当前状态确实如此我想要的是,它只是在页面的右侧运行(我可以复制粘贴它,我试过的其他东西我不能这样做)并且不会在“><”之间添加换行符。当我在那里添加一些东西来尝试它时。

这是我的蹩脚代码,请忽略评论,这只是我尝试的内容。:

function doGet(e) {
  var myapp = UiApp.createApplication().setTitle('CAML Response Decoder');
  var testText = "Decoded Response Will Appear Here...";
  var mygrid = myapp.createGrid(2, 2);
  mygrid.setText(0, 0, 'SAML Response: ');
  mygrid.setWidget(0, 1, myapp.createTextBox().setName("SAMLin"));
  mygrid.setText(1, 0, 'Decoded: ');
//  mygrid.setWidget(1, 1, myapp.createTextBox().setName("SAMLout"));
  mygrid.setWidget(1, 1, myapp.createLabel(testText).setWordWrap(true).setId("SAMLout"));
//  mygrid.setWidget(1, 1, myapp.createHTML(testText).setId("SAMLout").setWordWrap(true).setWidth(50));
  var mybutton = myapp.createButton('Decode');
//  var mypanel = myapp.createVerticalPanel().setSize(800,500);
  var mypanel = myapp.createHorizontalPanel();
  mypanel.add(mygrid);
  mypanel.add(mybutton);
  myapp.add(mypanel);

  var handler = myapp.createServerHandler('myClickHandler');
  mybutton.addClickHandler(handler);
  handler.addCallbackElement(mygrid);
  return myapp;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();
  var textValue = e.parameter.SAMLin;
  var strURIDecoded = textValue.replace(/%2D/g, "-").replace(/%5F/g, "_").replace(/%2E/g, ".").replace(/%21/g, "!").replace(/%7E/g, "~").replace(/%2A/g, "*").replace(/%27/g, "'").replace(/%28/g, "(").replace(/%29/g, ")").replace(/%3Cbr%20%2F%3E/g, "%0D" ).replace(/%0A/g, "%0D" ).replace(/%250D/g, "%0D").replace(/%5Cr%5Cn/g, "%0D").replace(/%2B/g, "+").replace(/%5Cn/g, "%0D").replace(/%5Cr/g, "%0D").replace(/%3D/g, "=");
  var strB64Decoded = Utilities.base64Decode(strURIDecoded);
  var Assertion = Utilities.newBlob(strB64Decoded).getDataAsString();
  var AllDone = Assertion.replace(/></g, ">\n<");
//  var AllDone = ("<div>" + AllDone2 + "</div>");

//  var document = XmlService.parse(Assertion);
//  var AllDone = XmlService.getCompactFormat()
//     .setLineSeparator('\n')
//     .setEncoding('UTF-8')
//     .setIndent('   ')
//     .format(document);

  app.getElementById('SAMLout').setText(AllDone)  
  app.close();
  return app;
}

2 个答案:

答案 0 :(得分:0)

我不认为标签会允许任何可以创建新行的东西。您确实尝试.createHTML,它允许基本标记。尝试使用带有<br>标记的HTML。

Line Break documentation - MDN

我没有尝试过,所以我不知道它是否有效。

除此之外,我认为您需要分解内容,并添加第二个标签。

答案 1 :(得分:0)

我明白了。我最终使用.createHTML然后替换所有“&lt;”和“&gt;”与另一个角色。这完全归功于XML和Google Sites剥离了他们不喜欢的东西。我很乐意听到其他解决方案,因为这是一个非常混乱的解决方案。