完全な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について
***** ref にあるように、window.location.Origin
に対するブラウザの互換性は明確ではありません。私はクロムでそれをチェックしました、そしてそれがポートが80以外であればhttp://sub.domain.com:port
を、そしてポートが80であればhttp://sub.domain.com
を返しました。
@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");
}
現在のページのURLだけでなく、任意の任意のURLを使用できるようにしたいので、受け入れられた答えは私には機能しませんでした。
URL
オブジェクト を見てください。
var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol; // "http:"
url.hostname; // "aaa.bbb.ccc.com"
url.pathname; // "/asdf/asdf/sadf.aspx"
url.search; // "?blah"
やってみる
document.location.Host
または
document.location.hostname
私が使用したStackOverflowレスポンスで見たことのないもう1つのハックがあります。画像の "src"属性を使用すると、あなたのサイトの完全なベースパスが得られます。例えば :
var dummy = new Image;
dummy.src = '$'; // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'
http://domain.com/somesite/index.html
のようなURLでは、root
はhttp://domain.com/somesite/
に設定されます。これはlocalhostまたは有効なベースURLに対しても機能します。
これにより、$
ダミーイメージに対する失敗したHTTP要求が発生します。これを避けるために、代わりに既存の画像を使用することができますが、わずかなコードの変更のみです。
もう1つの亜種はダミーリンクを使用します。HTTPリクエストには影響を与えません。
var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;
ただし、すべてのブラウザでテストしたわけではありません。
私はこれが少し遅れているのを知っています、しかし私は少し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
をサポートしていませんが、私の職業ではそれは問題ではありません。
何か指定したいのですが。誰かが私が必要とするようなパスで全体のURLを取得したい場合は、使用することができます。
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
これをチェックして:
alert(window.location.hostname);
これはホスト名をwww.domain.com
として返します。
そして:
window.location.Host
www.example.com:80
のようなポートでドメイン名を返します
完全な参照チェックについては Mozilla開発者 サイト.
正規表現ははるかに高い柔軟性を提供します。
//document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
//1.
var r = new RegExp(/http:\/\/[^/]+/);
var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com
//2.
var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf