javascript – vs location.hostname and cross-browser compatibility?

The Question :

388 people think this question is useful

Which one of these is the most effective vs checking if the user agent is accessing via the correct domain.

We would like to show a small js based ‘top bar’ style warning if they are accessing the domain using some sort of web proxy (as it tends to break the js).

We were thinking about using the following:

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...

That would take care of any subdomains we ever use.

Which should we use host or hostname?

In Firefox 5 and Chrome 12:


.. shows the same for both.

Is that because the port isn’t actually in the address bar?

W3Schools says host contains the port.

Should be validated or can we be pretty certain in IE6+ and all the others it will exist?

The Question Comments :

The Answer 1

1134 people think this answer is useful

interactive link anatomy

As a little memo: the interactive link anatomy

In short (assuming a location of

  • hostname gives you
  • host gives you

The Answer 2

72 people think this answer is useful

host just includes the port number if there is one specified. If there is no port number specifically in the URL, then it returns the same as hostname. You pick whether you care to match the port number or not. See for more info.

I would assume you want hostname to just get the site name.

The Answer 3

35 people think this answer is useful

If you are insisting to use the window.location.origin You can put this in top of your code before reading the origin

if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');


PS: For the record, it was actually the original question. It was already edited 🙂

The Answer 4

10 people think this answer is useful

Your primary question has been answered above. I just wanted to point out that the regex you’re using has a bug. It will also succeed on which is not a subdomain of

What you really want is this:


The Answer 5

3 people think this answer is useful


It seems that you will get the same result for both, but hostname contains clear host name without brackets or port number.

The Answer 6

0 people think this answer is useful

Just to add a note that Google Chrome browser has origin attribute for the location. which gives you the entire domain from protocol to the port number as shown in the below screenshot. chrome developers tool

Add a Comment