如何从当前页面使用javascript获取主机网址


Answers:


316
var host = window.location.hostname;

或可能

var host = "http://"+window.location.hostname;

或者如果您喜欢串联

var protocol = location.protocol;
var slashes = protocol.concat("//");
var host = slashes.concat(window.location.hostname);

3
也许没有指定http。使用相对协议。比硬编码更合适。
达斯(Garth Egregious)

32
使用window.location.host而不是主机名,或者如果端口不是80。它会失败
斯特凡·斯泰格尔

1
@MattBrowne当处理将产生字符串的东西时,我会说您应该始终使用concat。例如var a = 1 + 2 + " should be 12";vs this的concat版本var a = "".concat(1).concat(2).concat(" should be 12");。使用concat可以为您省去很多麻烦,这+是计算问题,而不是串联问题。
埃里克·赫里兹

3
hostname将仅host提供域,还将提供端口。这是一个很棒的微型工具,可查看链接解剖结构bl.ocks.org/abernier/3070589
Lukas Liesis '16

4
window.location.origin也可以很好地工作-它包括协议和端口。
rothschild86

95

要获取主机名: location.hostname

但是您的示例也在寻找该方案,因此location.origin似乎可以在Chrome中实现您想要的功能,但是Mozdev文档中并未提及。你可以用

location.protocol + '//' + location.hostname

如果您还想要端口号(当端口号不是80时),则:

location.protocol + '//' + location.host

Firefox 4似乎没有,尽管Chrome 12却没有。是在规范中定义的吗?
Delan Azabani 2011年

嗨..为了获得港口,这个例子像个吊饰一样工作。.感谢
karthik k 2011年

FF从21.0开始就支持location.origin:developer.mozilla.org/en-US/docs/Web/API/Window.location
zifot 2014年

67

您可以使用以下命令获取协议,主机和端口:

window.location.origin

浏览器兼容性

桌面

| Chrome                           | Edge  | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit)                            |
|----------------------------------|-------|-----------------|-------------------|-------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)           | (Yes)             | (Yes) | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)     | 11                | ?     | 7 (possibly earlier, see webkit bug 46558) |

移动

| Android                          | Edge  | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile                              |
|----------------------------------|-------|------------------------|----------|--------------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)                  | (Yes)    | (Yes)        | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)            | ?        | ?            | 7 (possibly earlier, see webkit bug 46558) |

所有浏览器兼容性均来自Mozilla开发人员网络


4
我应该提到IE不支持此功能。
2014年

请注意,它是一项新功能,旧浏览器不支持。
kabirbaidhya

@kabirbaidhya详细兼容性如何!
Monso

好。但是,当MDN家伙更新浏览器兼容性表时会发生什么,这种情况在更新的浏览器版本中经常发生。您可能需要继续更新它以与他们的表;)。
kabirbaidhya

并非如此,这是支持它的最早已知版本,而不是最新版本,并且他们查看的所有浏览器都已支持它。只有当他们决定包括的其他浏览器可以弄清楚某些受支持的浏览器的版本号时,这种情况才会改变,因为大多数较新的版本均来自其初始发行版,因此该版本有些争议。
Monso

7
let path = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port;


4

根据您的需要,可以使用其中一个window.location属性。在您的问题中,您正在询问主机,可以使用window.location.hostname(例如www.example.com)检索主机。在您的示例中,您展示了一种称为origin的东西,可以使用window.location.origin(例如http://www.example.com)进行检索。

var path = window.location.origin + "/";

//result = "http://localhost:60470/"

2

我喜欢这个目的

window.location.href.split("/")[2] == "localhost:17000" //always domain + port

您可以将其应用于任何网址字符串

var url = "http://localhost:17000/sub1/sub2/mypage.html?q=12";
url.split("/")[2] == "localhost:17000"
url.split("/")[url.split("/").length-1] == "mypage.html?q=12"

从url字符串中删除协议,域和路径(相对路径)

var arr = url.split("/");
if (arr.length>3)
   "/" + arr.splice(3, arr.length).join("/") == "/sub1/sub2/mypage.html?q=12"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.