294

Given that I'm on the following page:

http://www.webmail.com/pages/home.aspx

How can I retrieve the host name ("http://www.webmail.com") with JavaScript?

2
  • 5
    possible duplicate of Get host name in JavaScript Commented Mar 19, 2015 at 9:55
  • I simply did console.log(window.location). You will see all available attributes and their values. Only the port part is something you have to worry about, see answers below (or print the info on web page with non-standard port) Commented Oct 21, 2022 at 9:39

9 Answers 9

477
// will return the host name and port
var host = window.location.host; 

or possibly

var host = window.location.protocol + "//" + window.location.host;

or if you like concatenation

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

// or as you probably should do
var host = location.protocol.concat("//").concat(window.location.host);

// the above is the same as origin, e.g. "https://stackoverflow.com"
var host = window.location.origin;

If you have or expect custom ports use window.location.host instead of window.location.hostname

Sign up to request clarification or add additional context in comments.

9 Comments

Maybe don't specify http though. Use the relative protocol. Might be more appropriate than hard-coding one.
Use window.location.host instead of hostname, or it will fail if the port is not 80.
@MattBrowne When working with something that shall produce a string I'd say you should always use concat. In example var a = 1 + 2 + " should be 12"; vs the concat version of this var a = "".concat(1).concat(2).concat(" should be 12");. Using concat will save you a lot of trouble + is for calculation, not concatenation.
hostname will give only domain and host will provide port also. This is great mini tool to see link anatomy bl.ocks.org/abernier/3070589
window.location.origin works well too - it includes the protocol and the port.
|
113

To get the hostname: location.hostname

But your example is looking for the scheme as well, so location.origin appears to do what you want in Chrome, but gets not mention in the Mozdev docs. You can construct it with

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

If you want the port number as well (for when it isn't 80) then:

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

3 Comments

Firefox 4 doesn't seem to have it, though Chrome 12 does. Is it defined in a specification?
Hi..For getting the port, the example worked like a charm..Thanks for that
FF supports location.origin since 21.0: developer.mozilla.org/en-US/docs/Web/API/Window.location
93

You can get the protocol, host, and port using this:

window.location.origin

Browser compatibility

Desktop

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)

Mobile

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)

All browser compatibility is from Mozilla Developer Network

5 Comments

I should mention IE does not support this.
Please do mention that it's a new feature and not supported by old browsers.
@kabirbaidhya How about verbose compatibility!
Good. But what happens when the MDN guys update the browser compatibility table, which happens pretty often with newer browser releases. You might need to keep on updating this to sync with their table ;).
Not really, this is the earliest know versions to support it not the latest and all browsers they look at already support it. This would only change if they decide to include another browser of can figure out the version numbers on some of the supported browsers which is somewhat moot since most newer ones are from their initial release.
12
let path = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port;

Comments

10

You can try something like that:

1. Get the full URL:

     window.location

2. Get the only protocol:

    window.location.protocol

3. Get the host (without port):

    window.location.hostname

4. Get the host + port:

    window.location.host

5. Get the host and protocol:

    window.location.origin

6. Get pathname or directory without protocol and host:

    var url = 'http://www.example.com/somepath/path2/path3/path4';
    
    var pathname = new URL(url).pathname;
    
    alert(pathname); 

Comments

8

Depending on your needs, you can use one of the window.location properties. In your question you are asking about the host, which may be retrieved using window.location.hostname (e.g. www.example.com). In your example you are showing something what is called origin, which may be retrieved using window.location.origin (e.g. http://www.example.com).

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

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

Comments

7

This should work:

window.location.hostname

1 Comment

or host if you also need port
6

Keep in mind before use window and location

1.use window and location in client side render (Note:don't use in ssr)

window.location.host; 

or

var host = window.location.protocol + "//" + window.location.host;

2.server side render

if your using nuxt.js(vue) or next.js(react) refer docs

For nuxt js Framework

req.headers.host

code:

async asyncData ({ req, res }) {
        if (process.server) {
         return { host: req.headers.host }
        }

Code In router:

export function createRouter (ssrContext) {



console.log(ssrContext.req.headers.host)   
      return new Router({
        middleware: 'route',
        routes:checkRoute(ssrContext),
        mode: 'history'
      })
    }

For next.js framework

Home.getInitalProps = async(context) => {
   const { req, query, res, asPath, pathname } = context;
   if (req) {
      let host = req.headers.host // will give you localhost:3000
     }
  }

For node.js users

var os = require("os");
var hostname = os.hostname();

or

request.headers.host

For laravel users

public function yourControllerFun(Request $request) {

    $host = $request->getHttpHost();

  

    dd($host);

}

or

directly use in web.php

Request::getHost();

Note :

both csr and ssr app you manually check example ssr render

if(req.server){
host=req.host;
}
if(req.client){
host=window.location.host; 
}

Comments

4

I like this one depending of purpose

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

You can apply it on any url-string

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"

Removing protocol, domain & path from url-string (relative path)

var arr = url.split("/");
if (arr.length>3)
   "/" + arr.splice(3, arr.length).join("/") == "/sub1/sub2/mypage.html?q=12"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.