2014-11-06 92 views
0

我有一個Google Apps腳本來獲取網頁並將其輸出。我需要重寫頁面中的任何鏈接以通過腳本加載。如何爲HTML頁面中的每個鏈接添加一個字符串?

即:

<a href="http://stackoverflow">Stackoverflow</a> 

將被改寫爲

<a href="https://script.google.com/{snip}exec?http://stackoverflow.com">Stackoverflow</a> 

哪裏https://script.google.com/{snip}exec?是腳本本身的URL。

這是我到目前爲止有:

function getPage(url) { 
    var options = { 
    headers : {'Cache-Control' : 'max-age=0'} 
    }; 
    var response = UrlFetchApp.fetch(url, options); 

    var html = response.getContentText(); 

    // Prepend this string to each link in the page 
    var script_url = ScriptApp.getService().getUrl() + "?"; 

    // MAGIC GOES HERE 

    return HtmlService.createHtmlOutput(html); 
} 

如何預先考慮script_url字符串在HTML頁面中的每一個環節?

更新:雖然繼續嘗試自己弄清楚,但我注意到有些頁面在其鏈接中使用相對URL。一個答案需要考慮這一點,並在提供腳本URL之前將相對URL修改爲絕對URL。

(注:我已標記的問題與Javascript但答案必須是在谷歌企業應用套件腳本可用)

回答

1

您應該使用正則表達式來代替你自動想做的事,所有的HTML郵件。如果你構建一個強大的應用程序,這應該工作,但要小心,可能有一些例外,例如一個CSS網址。

這裏幾乎工作樣本:

var script_url = ScriptApp.getService().getUrl() + "?url="; 

function doGet(e) { 
var url = e.parameter.url; 
    var options = { 
    headers : {'Cache-Control' : 'max-age=0'} 
    }; 
    var response = UrlFetchApp.fetch(url, options); 

    var html = response.getContentText(); 

    // Prepend this string to each link in the page 

    // MAGIC GOES HERE 
    var pattern = /href=("|')((https?:\/\/|www\.)([\da-z\.-]+)\.([a-z\.]{2,6})([?=&\/\w\.-]*)*\/?)/igm; 
    var out = html.replace(pattern,replacer); 

    Logger.log(out); 
    return HtmlService.createHtmlOutput(out); 
} 

function replacer(match, p1, p2, p3, offset, string){ 
// Logger.log("replacing: "+p1+p2+" -- "+match); 
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics 
    return("href="+p1+script_url+p2); 
    return [p1, p2, p3].join(' - '); 
} 

我只處理完整URL以http或www和不相關的,但有輕微的變化,你可以做到這一點。
這裏是一些鏈接,您可能希望有一個看看:

8 reg exp you should now
Mozilla RegExp String.prototype.replace()
regex101

相關問題