0

次のような cnn html を取得するために、クロスドメイン GET を実行しています。

$(function(){

var site = 'http://cnn.com';

$.get('proxy.php', { site:site }, function(data){

$(data).appendTo('#div');

}, 'html');

});

URLを除いて必要なものをすべて取得していますが、完全なURLではない場合がありますが、次のようにサーバー上の特定のパスを指しています。

/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3

問題は、誰かが私のサイトのリンクをクリックすると、URL が次のようになることです。

http://MY-WEBSITE/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3

挿入されている自分の URL を削除して、「cnn.com」に置き換えるにはどうすればよいですか? jquery の分割と置換を試みましたが、うまくいきません:

href = $(this).prop('href');
url = href.split('/');          
href.replace(url[2], 'cnn.com');

通常、コンソールに「分割が定義されていません」というエラーが表示されます。修正すると、エラーは「url が定義されていません」などに移動します。ときどき (他のコード バリエーションを使用した場合) エラーは発生しませんが、それでも機能しません。私はそれを理解することはできません。

4

4 に答える 4

1

URLが相対かどうかを簡単に確認できます。これを行う最も簡単な方法は、で始まるかどうかを確認することhttp://です。

var url = $(this).prop('href');
if (!(/^http/).test(url)) 
{
    url = site + url; // prepend "http://cnn.com" to the address
}

alert(url); // url is now a full url

より一般化されたソリューションが必要な場合は、サイトの正規表現オブジェクトを使用して、プレフィックスが存在するかどうかを判断できます。

var site = "http://cnn.com";
var siteRegex = new RegExp("^" + site); // Regex - Starts with site
var url = $(this).prop('href');
if (!siteRegex.test(url))
{
   url = site + url;
}

alert(url);
于 2013-01-25T14:33:15.770 に答える
1

あなたのコードを見ると、jQueryを使用していると思います。

この問題は、cnn.com のソース コードが相対リンクを使用しているように見えるために発生しています。次のjQueryを使用して、最初に cnn.com を挿入できます

$(function() {
    $('a').each(function() {
        if ($(this).attr('href').indexOf('http') === 0) {
            $(this).attr('href', 'http://www.cnn.com' + this.href);
        }
    });
});
于 2013-01-25T14:39:35.523 に答える
0

この小さな関数は、一般的な目的で使用できます。

function RelativeToAbsoluteURL(root, url) {
    var httpMatch = /https?:\/\//ig;
    if (!httpMatch.test(url)) {
        return root + (url.substr(0, 1) != "/" ? "/" + url : url);
    } else {
        return url;
    }
}

使用する:

RelativeToAbsoluteURL("http://www.cnn.com", "http://www.cnn.com/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3");

RelativeToAbsoluteURL("http://www.cnn.com", "/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3");

どちらも同じ URL を出力します ( http://www.cnn.com/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3)

于 2013-01-25T14:35:01.803 に答える
0

デモ

どちらもうまくいくようです:

var href = $(this).attr('href');
var url = (href.indexOf("/")===0) ? "http://...."+href:href;

可能な代替 - これは、href から完全修飾 URL を返します。

var href = this.href; // actual href and not the property
var url =(href.indexOf(location.hostname)===7) ? href.replace(location.hostname,"www.cnn.com"):href;

小道具の使用

var href = $(this).prop('href');
var url = (href.indexOf("/")===0) ? "http://...."+href:href;
于 2013-01-25T14:31:47.433 に答える