gpt4 book ai didi

javascript - 如何在 HTML 页面中的每个链接前面添加一个字符串?

转载 作者:行者123 更新时间:2023-12-03 11:30:07 24 4
gpt4 key购买 nike

我有一个 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);
}

如何在 HTML 页面中的每个链接前面添加 script_url 字符串?

更新:在继续尝试自己解决问题时,我注意到某些页面在其链接中使用相对 URL。答案需要考虑这一点,并在添加脚本 URL 之前将相对 URL 修改为绝对 URL。

(注意:我已使用 Javascript 标记了问题,但答案必须可在 Google Apps 脚本中使用。)

最佳答案

您应该使用 regExp 来自动替换所有 html 消息中您想要的内容。如果你构建一个健壮的,这应该可以工作,但要小心,可能会有一些异常(exception),例如 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,但只需稍作更改,您也可以这样做。
您可能想查看以下一些链接:

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

关于javascript - 如何在 HTML 页面中的每个链接前面添加一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com