2

バックアップ Web サイトがあります。ウェイバックマシンのようなもの。HTML のコンテンツを返すと、明らかに、リンクされたドキュメント (画像、javascript ファイル、css ファイルなど) が元の Web サーバー (私のサーバーではなく) から読み込まれます。これらのリンクをサーバーからロードされるように置き換えたいと思います。私が取るべき2つのアプローチがあります:

  1. Java または PHP を使用してサーバー側で実行します。これを行うには、Java と PHP の両方を使用できます。たとえば Java では、jSoup を使用して HTML を解析し、リンクを置き換えることができます。
  2. jQueryを使用してクライアント側で実行します。

2番目の方法を使用すると、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 上の相対リンクを絶対リンクに変換してから、私の Web サイトにURL引数として送信する必要があります。

4

1 に答える 1

1

リンクが相対リンクの場合は、<base>jQuery でタグを追加できます。

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

更新しました

imgすべてのアイテムに対して 2 つの呼び出しを行うため、jQuery は最適なソリューションではありません。1 つは元のサーバーからの最初のロード用で、もう 1 つは新しいサーバーからの 2 番目のロード用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")));
    });
});
于 2013-03-07T19:00:46.020 に答える