如何在JavaScript中提取URL的主机名部分
有一个真正简单的方法从完整的URL开始:
document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"
并提取主机部分:
aaa.bbb.ccc.com
有一个可靠的JavaScript函数,但我找不到它。
假设您有一个包含此地址的页面: http://sub.domain.com/virtualPath/page.htm
: http://sub.domain.com/virtualPath/page.htm
。 在页面代码中使用以下来实现这些结果:
-
window.location.host
:你会得到sub.domain.com:8080
或sub.domain.com:80
-
window.location.hostname
:你会得到sub.domain.com
-
window.location.protocol
:你会得到http:
-
window.location.port
:你会得到8080
或80
-
window.location.pathname
:你会得到/virtualPath
-
window.location.origin
:你会得到http://sub.domain.com
*****
更新:关于.origin
*****作为参考状态,浏览器兼容性window.location.origin
不清楚。 我已经检查了铬,它返回http://sub.domain.com:port
如果端口是什么,但80,和http://sub.domain.com
如果端口是80。
特别感谢@torazaburo向我提到这一点。
您可以连接位置协议和主机:
var root = location.protocol + '//' + location.host;
对于一个URL,让说'http://stackoverflow.com/questions'
,它会返回'http://stackoverflow.com'
使用document.location
对象及其host
或hostname
属性。
alert(document.location.hostname); // alerts "stackoverflow.com"
有两种方法。 第一个是这里另一个答案的变体,但是这个是非默认端口:
function getRootUrl() { var defaultPorts = {"http:":80,"https:":443}; return window.location.protocol + "//" + window.location.hostname + (((window.location.port) && (window.location.port != defaultPorts[window.location.protocol])) ? (":"+window.location.port) : ""); }
但我更喜欢这个更简单的方法(可以与任何URIstring一起使用):
function getRootUrl(url) { return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1"); }
尝试
document.location.host
要么
document.location.hostname
使用
window.location.origin
和:“ http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah ”
你会得到: http : //aaa.bbb.ccc.ddd.com/
还有另一个黑客使用,从来没有见过任何StackOverflow响应:使用图像的“src”属性将产生您的网站的完整的基本path。 例如 :
var dummy = new Image; dummy.src = '$'; // using '' will fail on some browsers var root = dummy.src.slice(0,-1); // remove trailing '$'
在像http://domain.com/somesite/index.html
这样的URL上, root
将被设置为http://domain.com/somesite/
。 这也适用于本地主机或任何有效的基本URL。
请注意,这将导致$
dummy映像上的HTTP请求失败。 您可以使用现有的图像来避免这种情况,只需轻微的代码更改。
另一个变体使用虚拟链接,对HTTP请求没有副作用:
var dummy = document.createElement ('a'); dummy.href = ''; var root = dummy.href;
虽然我没有在每个浏览器上testing它。
接受的答案不适合我,因为想要能够处理任何任意的url,而不仅仅是当前页面的url。
看一下URL
对象 :
var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"); url.protocol; // "http:" url.hostname; // "aaa.bbb.ccc.com" url.pathname; // "/asdf/asdf/sadf.aspx" url.search; // "?blah"
检查这个:
alert(window.location.hostname);
这将返回主机名称www.domain.com
和:
window.location.host
将返回像www.example.com:80
这样的端口的域名
有关完整的参考资料,请查阅Mozilla开发者网站
我想指定一些东西。 如果有人想要像我需要的path得到整个url,可以使用:
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
正如马丁所说,其他答案不适用于任意的url。 新的URL对象将工作,但仍然是实验性的,不兼容所有的浏览器。
为了更可靠和跨浏览器的解决scheme,您可以使用我构build的这个组件来parsing一个任意的URL到类似于上面的URL对象中find的属性。
例如:
var urlObject = parseUrl('http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah'); var newUrl = urlObject.hostname;
newUrl现在将包含:
aaa.bbb.ccc.com
您可以导入组件以使用parseUrl()