有一个非常简单的方法,从一个完整的URL开始:如何提取一个URL的主机名部分在JavaScript
document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"
而且只提取主机部分:
aaa.bbb.ccc.com
有总得做一个可靠的JavaScript功能,但我找不到它。
有一个非常简单的方法,从一个完整的URL开始:如何提取一个URL的主机名部分在JavaScript
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
。使用下面的页面代码才达到这些结果:
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
的ref状态,浏览器兼容性不明确。我已经检查过它在铬中,它返回http://sub.domain.com:port
如果端口是80而没有任何东西,并且http://sub.domain.com
如果端口是80.
特别感谢@torazaburo提到我。
尝试
document.location.host
或
document.location.hostname
你可以串连位置协议和主机:
var root = location.protocol + '//' + location.host;
的URL,让说'http://stackoverflow.com/questions'
,它将返回'http://stackoverflow.com'
它似乎应该使用“主机名”而不是“主机”来实现上述结果。来源:http://stackoverflow.com/questions/6725890/window-location-host-vs-window-location-hostname-and-cross-browser-compatibility – user417669 2013-11-10 23:10:30
您可以使用location.origin具有相同的结果。 – 2013-12-14 07:05:30
原始问题没有要求URL的协议部分。 – 2015-11-11 08:03:28
使用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) : "");
}
但我更喜欢这种简单的方法(这与任何URI字符串作品):
function getRootUrl(url) {
return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
检查这样的:
alert(window.location.hostname);
这将返回主机名www.domain.com
和:
window.location.host
将端口返回域名如www.example.com:80
有关完整的参考检查Mozilla developer网站。
还有一个黑客我使用,从未在任何StackOverflow响应中看到: 使用图像的“src”属性将产生您的网站的完整基本路径。 例如:
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。
请注意,这将导致$
哑图像上的HTTP请求失败。 您可以使用现有的图像来避免这种情况,只需轻微更改代码即可。
另一个变例使用虚设链,对HTTP请求无副作用:
var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;
我没有测试它在所有的浏览器,但。
我想指定一些东西。如果有人想与路径的整个URL像我所需要的,可以使用:
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
为什么要走更长的路。它可以通过var fullUrl = window.location.origin + window.location.pathname – Anant 2016-09-30 13:43:28
得到,但有时你想在协议和主机名之间添加类似子域的内容,例如多语言等 – 2016-10-01 18:42:39
接受的答案并没有为我工作,因为希望能够与任何arbitary的URL,而不仅仅是当前页面的工作URL。
看看在URL
object:
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"
耻辱它不支持在IE中...... – Miro 2017-12-12 02:24:51
正如马丁所说,其他的答案不会任意网址。新的URL object可以工作,但仍然是实验性的,并且与所有浏览器不兼容。
对于更可靠和跨浏览器的解决方案,您可以使用我构建的this component将任意url解析为与上述URL对象中类似的属性。
例如:
var urlObject = parseUrl('http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah');
var newUrl = urlObject.hostname;
NEWURL现在将包含:
aaa.bbb.ccc.com
可以导入使用的parseURL()
我知道这是一个有点晚分量,但我用一点ES6语法做了一个干净的小功能
function getHost(href){
return Object.assign(document.createElement('a'), { href }).host;
}
它也可以在ES5被writen像
function getHost(href){
return Object.assign(document.createElement('a'), { href: href }).host;
}
当然IE doen't支持Object.assign
,但在我的工作中,这并不重要。
我在IIS中有一个网站和2个应用程序。例如:** sub.domain.com/v1 **和** sub.domain.com/v2 **以及像*** sub.domain.com/v1/Default.aspx***或_sub.domain这样的页面。 com/v2/Products/Default.aspx_等。我如何获得价值***/v2 ***,我的应用程序的根*** sub.domain.com/v2***? – Kiquenet 2015-10-06 08:13:35
@Kiquenet使用JavaScript IDE如WebStorm,您可以在编写代码时查看可能的选项。 – 2016-04-13 09:23:24
'window.location.origin'在IE9中未定义(根据链接,它是IE11 +)。 [这个答案](http://stackoverflow.com/a/1368295/897326)帮助。 – Neolisk 2017-02-24 19:49:13