【问题标题】:Manipulate linked files on the HTML dynamically动态处理 HTML 上的链接文件
【发布时间】:2013-02-23 02:55:29
【问题描述】:

我有一个备用网站。像Wayback machine 这样的东西。当我返回 HTML 的内容时,很明显,链接的文档(如图像、javascript 文件、css 文件等)是从原始 Web 服务器(而不是我的服务器)加载的。现在我想替换这些链接,以便从我的服务器加载它们。我有两种方法可以采取:

  1. 使用 Java 或 PHP 在服务器端进行。我可以同时使用 Java 和 PHP 来做到这一点。例如在 Java 中,我可以使用 jSoup 来解析 HTML 并替换链接。
  2. 在客户端使用 jQuery。

使用第二种方法意味着我不必在我的服务器上添加负载来解析 HTML,但我认为,一旦页面被加载,文件就会开始从原始服务器下载,用户的带宽会浪费了。

另一方面,如果我能以某种方式确定图像是否已成功下载,我可以跳过从我的服务器下载并让用户使用从原始服务器下载的文件。

您对此有何建议?

更新

关于相对链接和绝对链接,我应该做一些澄清。我的服务上的链接存储为绝对路径。但是,HTML 文档可能同时具有这两种类型的链接。我需要做的是:

  • http://stackoverflow.com/images/image.png 转换为http://mysite.com/view/content?url=http://stackoverflow.com/images/image.png
  • /images/image.png(在http://stackoverflow.com上)转换为http://mysite.com/view/content?url=http://stackoverflow.com/images/image.png

简而言之,HTML 上的相对链接应转换为绝对链接,然后作为 URL 参数发送到我的网站。

【问题讨论】:

  • 链接是相对于网址还是硬编码到网址?
  • 两者。文档是从网络上抓取的。网站可以使用任何东西。

标签: java php jquery archive webarchive


【解决方案1】:

如果链接是相对的,您可以使用 jQuery 添加 <base> 标签。

$(function () {
    var base = $("<base>", {
        href: "http://www.your-new-website.com/"
    });
    $("head").append(base);
});

更新

jQuery 不会是最佳解决方案,因为您将对每个项目进行 2 次调用...一个用于从原始服务器进行初始加载,另一个用于从新服务器进行第二次加载,因为 jQuery 更改了 img 和 @ 987654325@ 链接。尽管如此,这应该可行。

function replaceDomain(href) {
    var originalDomain = document.domain;
    var newDomain = "mysite.com/view/content?url=http://" + originalDomain;
    if (href.indexOf(originalDomain) == -1) href = "http://" + originalDomain + href;
    return href.replace(originalDomain, newDomain);
}
$(function () {
    //convert links
    $('a').each(function () {
        $(this).attr("href", replaceDomain($(this).attr("href")));
    });

    //convert imgs
    $('img').each(function () {
        $(this).attr("src", replaceDomain($(this).attr("src")));
    });

    //convert css links
    $('link').each(function () {
        $(this).attr("href", replaceDomain($(this).attr("href")));
    });
});

【讨论】:

  • 我怎么没想到呢? :D 让我测试一下然后回复你。
  • 它只有在网站有相对链接时才有效。硬编码的 url 不会尊重base href
  • 请阅读我的问题的更新。这可能有效,但需要一些工作。您对此有何建议?
  • 谢谢。有什么方法可以确定文件是否已下载?在这种情况下,我可以在某些情况下跳过第二个请求。
  • 也许在替换之前检查 404 的 url? stackoverflow.com/questions/1591401/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2018-01-22
相关资源
最近更新 更多