JavaScript - 仅从 document.referrer 获取域名

17
我希望可以仅从引荐网址中获取域名。我通常会收到以下引荐网址:http://www.davidj.com/pages/flyer.asphttp://www.ronniej.com/linkdes.com/?adv=267&loc=897

每当我收到类似于上述的引荐网址时,我只想获取域名,例如: http://www.davidj.com
我尝试使用.split方法,但是我在使用它时遇到了麻烦。
7个回答

19
var url = "http://www.ronniej.com/linkdes.com/?adv=267&loc=897"
var referrer =  url.match(/:\/\/(.[^/]+)/)[1];

http://jsfiddle.net/hyjcD/

if (document.referrer) {
   url = document.referrer; 
   ref = url.match(/:\/\/(.[^/]+)/)[1];
}

@Reminson 谢谢你的帮助,它确实有效,但我有一个问题。我已经将代码放在我的域名上,使用了一个 .js 文件,并且基本上它被加载到了所有页面上。唯一的问题是,每当我直接访问一个页面(没有引荐网址),我就会收到以下错误提示:url.match(/://(.[^/]+)/)[1]; 为空 - Stephen
我正在使用以下代码:var url = unescape(document.referrer); var ref = url.match(/://(.[^/]+)/)[1]; - Stephen
这是因为 document.referrerundefined,没有 URL 可以匹配,你应该检查 if (document.referrer) 不是 "undefined",然后执行此代码。 - Ram
只需使用此解决方案:https://dev59.com/zWkv5IYBdhLWcg3w1kMJ#52850936 - Nabi K.A.Z.

10

使用 .host 可以包含端口。 - Aakash Verma

10

你可以在内部将URL写入锚点元素,然后从那个元素中获取较小的部分。

var anchor = document.createElement("a");
anchor.href = "http://www.davidj.com/pages/flyer.asp";

console.log(anchor.protocol + "//" + anchor.host); // "http://www.davidj.com"

这样做比起手动分割等操作要简单得多…… 这很合乎逻辑…… 原生锚点与window.location 相同,至少在URL方面如此。

编辑:IE 6-9会将默认端口添加到锚点的主机名中 // "http://www.davidj.com:80


2
IE 确实会将端口添加到 anchor.host,但不会添加到 location.host。如果您不需要端口,则可以使用 anchor.hostnamelocation.hostname - Ian Clelland

5

链分裂、切片和连接:

document.referrer.split("/").slice(0,3).join("/")

0
你可以使用正则表达式:
var matchHost = /^https?:\/\/.*\//;

var match = matchHost.exec('http://www.davidj.com/pages/flyer.asp');
if(match) {
    var host = match[0];
    console.log(host);
}

0
if (document.referrer.split('/')[2] == "domain") {
    //................
}                              

-1

无法使用 file:///home/user/desktop/page.html - user5994461
@user5994461 - 当谈论本地URL时,我不确定“domain”是什么意思,这样的URL没有域名。 - Gal Tamir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接