完全な URL から開始する本当に簡単な方法はありますか。
document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"
ホスト部分だけを抽出します。
aaa.bbb.ccc.com
これを確実に実行する JavaScript 関数が必要ですが、見つかりません。
完全な URL から開始する本当に簡単な方法はありますか。
document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"
ホスト部分だけを抽出します。
aaa.bbb.ccc.com
これを確実に実行する JavaScript 関数が必要ですが、見つかりません。
このアドレスのページがあるとします: 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 に感謝します。
ロケーション プロトコルとホストを連結できます。
var root = location.protocol + '//' + location.host;
URLの場合、たとえば、'http://stackoverflow.com/questions'
が返されます'http://stackoverflow.com'
document.location
オブジェクトとそのhost
プロパティhostname
を使用します。
alert(document.location.hostname); // alerts "stackoverflow.com"
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");
}
試す
document.location.host
また
document.location.hostname
使用する
window.location.origin
および「http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah」の場合
あなたが得るでしょう:http://aaa.bbb.ccc.ddd.com/
私が使用し、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;
ただし、すべてのブラウザでテストしたわけではありません。
何かを明記したいと思います。誰かが必要なパスを含む URL 全体を取得したい場合は、次を使用できます。
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
これが少し遅れていることはわかっていますが、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
が、私の仕事では問題ありません。