Javascript 如何为HTML页面中的每个链接预先添加字符串?

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消息中需要的内容。如果

我有一个GoogleApps脚本来获取网页并将其输出回来。我需要重写页面中的任何链接,以便通过脚本加载

i、 e:

如何将
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(' - ');
}