web-dev-qa-db-ja.com

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

ユーザーエージェントが正しいドメインを介してアクセスしているかどうかを確認することに対して、これらのうちどれが最も効果的です。

ある種の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 はHostにportが含まれていると言っています。

location.Host/hostnameを検証する必要がありますか、それともIE6以降で確実に存在することができますか?

318
anonymous-one

interactive link anatomy

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

-

手短に言うと(http://example.org:8888/foo/bar#bangの場所を仮定して):

  • hostnameはあなたにexample.orgを与えます
  • Hostはあなたにexample.org:8888を与えます
928
abernier

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

私はあなたがhostnameにちょうどサイト名を取得してほしいと思うでしょう。

68
jfriend00

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

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

解決策

シモンズ:記録のために、それは実際に最初の質問でした。すでに編集されています:)

29

あなたの主な質問は上で答えられました。私はちょうどあなたが使っている正規表現にバグがあることを指摘したいと思いました。 foo-domain.comのサブドメインではないdomain.comでも成功します。

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

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

MDN: https://developer.mozilla.org/ja/DOM/window.location

どちらでも同じ結果が得られるようですが、hostnameには、角かっこやポート番号のない明確なホスト名が含まれています。

3
Igor Dymov

Google Chromeブラウザには場所のOrigin属性があることに注意してください。下のスクリーンショットに示すように、プロトコルからポート番号までのドメイン全体が表示されます。 chrome developers tool

0
Gopi P