我是个新手,所以可能有一些我很想念的东西......
此代码嵌入在我公司使用的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;
}
答案 0 :(得分:0)
我不认为标签会允许任何可以创建新行的东西。您确实尝试.createHTML
,它允许基本标记。尝试使用带有<br>
标记的HTML。
Line Break documentation - MDN
我没有尝试过,所以我不知道它是否有效。
除此之外,我认为您需要分解内容,并添加第二个标签。
答案 1 :(得分:0)
我明白了。我最终使用.createHTML然后替换所有“&lt;”和“&gt;”与另一个角色。这完全归功于XML和Google Sites剥离了他们不喜欢的东西。我很乐意听到其他解决方案,因为这是一个非常混乱的解决方案。