2014-11-05 175 views
1

我有這個簡單的腳本來獲得一個頁面並且不改變地輸出它。但是,瀏覽器無法將輸出識別爲HTML,並將其顯示爲文本。如何從Google Apps腳本輸出HTML?

function doGet(e) { 
    var url = e.queryString || ""; 
    if (url != "") { 
    return getPage(url); 
    } 
    return "not found"; 
} 

function test() { 
    return getPage("www.google.com"); 
} 

function getPage(url) { 
    var options = { 
    headers : {'Cache-Control' : 'max-age=0'} 
    }; 
    var response = UrlFetchApp.fetch(url, options); 
    var html = response.getContent(); 
    return ContentService.createTextOutput(html).setMimeType(ContentService.MimeType.HTML); 
} 

怎麼了?我怎樣才能將提取的頁面輸出爲HTML?

+0

嗯,HTML不在有效的MIME類型列表中:https://developers.google.com/apps-script/reference/content/mime-type – Paul 2014-11-05 05:02:54

+0

我真的不知道,但看看這裏: https://developers.google.com/apps-script/reference/html/html-output – Paul 2014-11-05 05:05:18

回答

3

使用此回在你getPage()函數:

var html = response.getContentText(); 
return HtmlService.createHtmlOutput(html); 

但是,不要指望抓取網頁是「不變」 - HTML服務將消毒的內容,這可能導致一些頁面的功能被刪除或不工作。

另請注意,您的網絡應用呈現在iframe之內 - 您提取的網頁可能不允許它在iframe中運行,或者使用可能導致您的用戶被重定向離開網頁的frame-breakout javascript應用到獲取頁面的實際URL。

我必須問,雖然:你確定你必須這樣渲染外部頁面?不是一個簡單的<a href="..." target="_blank">link to external page (will open in a new tab/window)</a>就夠了嗎?

+0

「不會很簡單......」這是爲了獲取可能被阻止的頁面。我改變了'return'來使用你的建議,但現在我所得到的是每個抓取頁面的逗號分隔整數的可變長度字符串。下面是取得http://stackoverflow.com時看起來是ASCII值的小樣本:'60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,13,10,60,104,116,109,108, 62,13,10,60,104,101,97,100,62,13,10,32,32,32,32,13,10,32,32,32,32,60,116,105,116,108,101,62,83,116,97,99,107,32,79,118,101,114,102,108,111,119, 60,47,116,105,116,108,101,62,13,10,32,32,32,32,60,108,105,110,107,32,114' – 2014-11-05 23:13:33

+0

對不起,它應該是'.getContentText()'而不是'.getContent()'。我也在我的答案中編輯了代碼。 – azawaza 2014-11-06 00:05:35

+0

修復了它。謝謝。 – 2014-11-06 01:35:18