java - 动态操作 HTML 上的链接文件

标签 java php jquery archive webarchive

我有一个备份网站。类似于 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/图片/image.png
  • /images/image.png(在 http://stackoverflow.com 上)转换为 http://mysite.com/view/content ?url=http://stackoverflow.com/images/image.png

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

最佳答案

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

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

已更新

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

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")));
    });
});

关于java - 动态操作 HTML 上的链接文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15279161/

相关文章:

java - gradle 如何决定 file.encoding JVM 系统属性?

java - 将参数传递给 Java 解释器所需的 JAR

php - 亚马逊 MWS 的 Laravel 后台作业最佳实践

c# - Css display none 不适用于 div 及其内容

php - dropzone.js 未上传

java - Oracle MERGE 和准备好的语句

java - 如何将当前 boolean 值与先前值进行比较?

php - 用户 'root' Laravel 访问被拒绝

php - MySQLi 更新查询中的自定义时区

jquery - 如果 ajax 花费的时间少于 X 秒,如何延迟显示进度?