location.hostとlocation.hostnameとブラウザ間の互換性?


365

ユーザーエージェントが正しいドメインを介してアクセスしているかどうかをチェックするのに比べて、どちらが最も効果的ですか。

ある種のWebプロキシを使用してドメインにアクセスしている場合は、jsベースの「トップバー」スタイルの警告を表示したいと思います(jsを壊す傾向があるため)。

私たちは以下を使用することを考えていました:

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

これで、これまでに使用したサブドメインがすべて処理されます。

ホストとホスト名のどちらを使用するべきですか?

Firefox 5およびChrome 12の場合:

console.log(location.host);
console.log(location.hostname);

..は両方とも同じです。

ポートが実際にはアドレスバーにないためですか?

W3Schoolsは、ホストにポートが含まれていると言います。

location.host/hostnameを検証する必要がありますか、それともIE6 +とそれが存在する他のすべてでかなり確信で​​きるでしょうか?


6
注目すべき点の1つは、google chromeにはlocation.originがあり、MSIEとFirefoxにはないことです。 developer.mozilla.org/En/Window.location - msdn.microsoft.com/en-us/library/ms952653.aspx
Keyo


回答:


1064

インタラクティブリンクの構造

ちょっとしたメモとして:インタラクティブリンクの構造

-

要するに(場所がの場合http://example.org:8888/foo/bar#bang):

  • hostname あなたにあげる example.org
  • host あなたにあげる example.org:8888

87
写真は千の言葉の価値があります。
ジャック

4
@lolzerywowzery ...しかし、絵を説明するのに必要な数千の単語
アギハンマーシーフ

1
en.wikipedia.org/wiki/…によると、移植版はホストの一部と見なすべきではありません(ただし、これは機関の一部です)。
アレック

@Alecこれは興味深いテクニカルノートです。Wikipediaの引用をドリルダウンすると、RFC 3986よれば、「権限」がホスト名、、およびポートの連結の用語であるべきであることがわかり:ます。議論がlocation.host策定されてからまだどれだけの議論が残っているのだろう...誰もそのRFCを読んだり言及したりしていなかったので、今日はそのような名前が付けられているのではないかと思います。
JamesTheAwesomeDude

シンプルな解決策を本当にありがとう
Tarun Nagpal

70

指定されたポートがある場合、ホストにはポート番号が含まれます。特にURLにポート番号がない場合は、ホスト名と同じものが返されます。ポート番号を一致させるかどうかを選択します。詳細については、https://developer.mozilla.org/en/window.locationを参照してください

ホスト名にサイト名だけを取得させたいと思います。


33

あなたが使用するwindow.location.origin ことを主張しているなら、あなたはこれを読む前にあなたのコードの上に置くことができますorigin

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

解決

PS:記録のために、それは実際には元の質問でした。すでに編集されています:)


5
しかし.... OPはwindow.location.origin彼らの質問で決して言及しませんでした。彼らの質問は実際にはそうでない ものに関して具体的にでしたwindow.location.origin
Winderps、2014年

1
window.location.originにはブラウザーの互換性の問題があることにも注意してください。developer.mozilla.org/en-US/docs/Web/API/Window/...
スコット

10

あなたの主な質問は上記で回答されています。私が使用している正規表現にバグがあることを指摘したかっただけです。のfoo-domain.comサブドメインではないものでも成功しますdomain.com

あなたが本当に欲しいのはこれです:

/(^|\.)domain\.com$/


0

Google Chromeブラウザには場所のorigin属性があるというメモを追加するだけです。これにより、次のスクリーンショットに示すように、プロトコルからポート番号までのドメイン全体が得られます。 Chromeデベロッパーツール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.