417

完全な URL から開始する本当に簡単な方法はありますか。

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

ホスト部分だけを抽出します。

aaa.bbb.ccc.com

これを確実に実行する JavaScript 関数が必要ですが、見つかりません。

4

15 に答える 15

909

このアドレスのページがあるとします: http://sub.domain.com/virtualPath/page.htm。これらの結果を得るには、ページ コードで次を使用します。

  • window.location.host:sub.domain.com:8080またはsub.domain.com:80
  • window.location.hostname:あなたは得るでしょうsub.domain.com
  • window.location.protocol:あなたは得るでしょうhttp:
  • window.location.port:8080または80
  • window.location.pathname:あなたは得るでしょう/virtualPath
  • window.location.origin: あなたは得るでしょうhttp://sub.domain.com*****

更新: .origin について

*****参考文献にあるように、ブラウザの互換性window.location.originは明確ではありません。Chrome で確認したところhttp://sub.domain.com:port、ポートが 80 以外の場合、およびhttp://sub.domain.comポートが 80 の場合は返されました。

それについて言及してくれた @torazaburo に感謝します。

于 2013-06-27T06:57:18.620 に答える
164

ロケーション プロトコルとホストを連結できます。

var root = location.protocol + '//' + location.host;

URLの場合、たとえば、'http://stackoverflow.com/questions'が返されます'http://stackoverflow.com'

于 2009-09-02T15:08:30.557 に答える
36

document.locationオブジェクトとそのhostプロパティhostnameを使用します。

alert(document.location.hostname); // alerts "stackoverflow.com"
于 2009-09-02T15:09:40.883 に答える
25

2 つの方法があります。最初は別の回答の変形ですが、これはデフォルト以外のポートを説明しています:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

しかし、私はこのより単純な方法 (任意の URI 文字列で機能します) を好みます。

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
于 2012-09-06T23:48:03.207 に答える
7

試す

document.location.host

また

document.location.hostname
于 2009-09-02T15:05:40.217 に答える
7

使用する

window.location.origin

および「http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah」の場合

あなたが得るでしょう:http://aaa.bbb.ccc.ddd.com/

于 2013-04-08T14:09:54.053 に答える
3

私が使用し、StackOverflow 応答で見たことのない別のハックがあります。画像の「src」属性を使用すると、サイトの完全な基本パスが生成されます。例えば ​​:

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

のような URLhttp://domain.com/somesite/index.htmlでは、 rootが に設定されhttp://domain.com/somesite/ます。これは、localhost または任意の有効なベース URL に対しても機能します。

$これにより、ダミー イメージに対する HTTP 要求が失敗することに注意してください。コードをわずかに変更するだけで、代わりに既存のイメージを使用してこれを回避できます。

別の亜種はダミー リンクを使用し、HTTP リクエストに副作用はありません。

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

ただし、すべてのブラウザでテストしたわけではありません。

于 2013-11-24T18:50:51.350 に答える
2

何かを明記したいと思います。誰かが必要なパスを含む URL 全体を取得したい場合は、次を使用できます。

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
于 2015-12-11T14:40:09.833 に答える
2

これが少し遅れていることはわかっていますが、ES6 構文を少し使ってクリーンで小さな関数を作成しました

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).host;
}

ES5のように書くこともできます

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).host;
}

もちろん IE は をサポートしていませんObject.assignが、私の仕事では問題ありません。

于 2017-12-19T21:23:13.377 に答える