我正在进行跨域GET以获取像这样的cnn html:
$(function(){
var site = 'http://cnn.com';
$.get('proxy.php', { site:site }, function(data){
$(data).appendTo('#div');
}, 'html');
});
我得到了我需要的一切,除了网址有时不是完整的网址,而是指向服务器上的某条路径,如下所示:
/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3
所以问题是,如果有人点击我网站上的链接,网址将如下所示:
http://MY-WEBSITE/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3
如何删除自己插入的网址并将其替换为“cnn.com”? 我尝试了jquery split和replace但是它不起作用:
href = $(this).prop('href');
url = href.split('/');
href.replace(url[2], 'cnn.com');
我通常在控制台中得到一个错误'split is not defined',当我修复它时,错误会转移到'url is not defined'等等。有时(使用其他代码变体)我没有错误但它仍然无效。我弄清楚了。
答案 0 :(得分:1)
您可以简单地检查网址是否相对。最简单的方法是检查它是否以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
如果您想要更通用的解决方案,可以使用网站上的regexp对象来确定前缀是否存在。
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);
答案 1 :(得分: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);
}
});
});
答案 2 :(得分:0)
似乎有效:
var href = $(this).attr('href');
var url = (href.indexOf("/")===0) ? "http://...."+href:href;
可能的替代方案 - 此方法将从href
返回完全限定的URLvar href = this.href; // actual href and not the property
var url =(href.indexOf(location.hostname)===7) ? href.replace(location.hostname,"www.cnn.com"):href;
使用prop
var href = $(this).prop('href');
var url = (href.indexOf("/")===0) ? "http://...."+href:href;
答案 3 :(得分: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");
两者都会输出相同的网址(http://www.cnn.com/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3
)