Javascript 如何为HTML页面中的每个链接预先添加字符串?
我有一个GoogleApps脚本来获取网页并将其输出回来。我需要重写页面中的任何链接,以便通过脚本加载 i、 e: 如何将Javascript 如何为HTML页面中的每个链接预先添加字符串?,javascript,html,google-apps-script,Javascript,Html,Google Apps Script,我有一个GoogleApps脚本来获取网页并将其输出回来。我需要重写页面中的任何链接,以便通过脚本加载 i、 e: 如何将script\u url字符串预先添加到HTML页面中的每个链接 更新:当我继续尝试自己解决问题时,我注意到一些页面的链接中使用了相对URL。一个答案需要考虑这一点,并在编写脚本URL之前将相对URL修改为绝对URL。 (注意:我已经用Javascript标记了这个问题,但答案必须可以在谷歌应用程序脚本中使用。)您应该使用regExp自动替换所有html消息中需要的内容。如果
script\u url
字符串预先添加到HTML页面中的每个链接
更新:当我继续尝试自己解决问题时,我注意到一些页面的链接中使用了相对URL。一个答案需要考虑这一点,并在编写脚本URL之前将相对URL修改为绝对URL。
(注意:我已经用
Javascript
标记了这个问题,但答案必须可以在谷歌应用程序脚本中使用。)您应该使用regExp自动替换所有html消息中需要的内容。如果您构建了一个健壮的url,这应该是可行的,但是要小心,可能会有一些例外,例如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的完整URL,而不处理相关URL,但只要稍作更改,您也可以这样做。以下是您可能希望查看的一些链接:
<a href="https://script.google.com/{snip}exec?http://stackoverflow.com">Stackoverflow</a>
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);
}
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(' - ');
}