2014-10-30 74 views
0

我是一個新手,所以可能有一些顯而易見的東西丟失了...嵌入Google網站的Google App腳本中的換行符?

此代碼嵌入在我公司使用的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

我不認爲標籤將允許任何會創建一個新行。你曾嘗試.createHTML,它允許基本的標記。嘗試使用帶有<br>標記的HTML。

Line Break documentation - MDN

我還沒有嘗試過,所以我不知道,如果它的工作原理。

除此之外,我認爲你需要分解內容,並添加第二個標籤。

+0

嗨。我確實嘗試過。這是註釋過的一行。它的格式有所不同,然後在整個地方傾斜輸出。它以某種方式似乎誤解了XML(或者可能是Google Site將其去掉?),並僅顯示部分文本。關於添加第二個標籤,你是什麼意思? – user1701061 2014-10-30 20:26:40

+0

您正在創建一個ID爲「SAMLout」的標籤,然後設置該標籤的文本,對不對?然後將整個內容放入該標籤中,並嘗試用新行來格式化。我要說的是,爲每一段新文本創建一個新變量,然後爲每一行創建一個標籤,併爲該行設置文本。 – 2014-10-30 21:06:09

0

我想通了。我結束了使用.createHTML,然後用另一個字符替換所有「<」和「>」。這一切都歸因於XML和Google協作平臺剝離了他們不喜歡的東西。我很想聽聽其他解決方案,因爲這是一個相當混亂的解決方案。