我有一个Google Apps脚本来获取网页并将其输出。我需要重写页面中的任何链接以加载脚本。
即:
<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。
(注意:我已使用Javascript
标记了问题,但答案必须可在Google Apps脚本中使用。)
答案 0 :(得分:1)
您应该使用regExp在所有html消息中自动替换您想要的内容。如果你构造一个健壮的,这应该工作,但要小心可能有一些例外,例如css url。
这是一个几乎可以运作的样本:
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(' - ');
}
我只处理带有http或www的完整网址,而不是相对的网址,但只要稍作修改,您也可以这样做 这里有一些您可能想要查看的链接:
8 reg exp you should now
Mozilla RegExp String.prototype.replace()
regex101