回答:
最初に現在の住所を取得する
var url = window.location.href
次に、その文字列を解析します
var arr = url.split("/");
あなたのURLは:
var result = arr[0] + "//" + arr[2]
お役に立てれば
location
は、オブジェクトが利用できないURL文字列で動作します(ブラウザー外のjs!)
location
)を使用していますが、どの URLに。それがきちんとしていることを確認してください。
window.location.href.split('/').slice(0, 3).join('/')
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
about://
。ただし、知りたいのですが、どのような場合に使用しabout:blank
ますか?にプラグインリソースを挿入するブラウザがあるかどうかはわかりませんがabout:blank
、それが唯一の使用例であると思われます。
location
、この場所にいる必要があります)
location.host
代わりに使用できませんか?location.hostname
location.port
これらの回答はいずれも、現在のページのURLではなく、任意のURLを必要とする質問に完全に対処しているようには見えません。
URL APIを使用できます(IE11ではサポートされていませんが、他のすべての場所で利用できます)。
これにより、検索パラメータへのアクセスも簡単になります。別のボーナス:DOMに依存しないため、Webワーカーで使用できます。
const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
これが古いブラウザでも機能する必要がある場合に使用します。
// Create an anchor element (note: no need to append this element to the document)
const url = document.createElement('a');
// Set href to any path
url.setAttribute('href', 'http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
ブラウザーの組み込みパーサーはすでにその役割を果たしています。これで、必要なパーツを取得できます(これは上記の両方の方法で機能することに注意してください)。
// Get any piece of the url you're interested in
url.hostname; // 'example.com'
url.port; // 12345
url.search; // '?startIndex=1&pageSize=10'
url.pathname; // '/blog/foo/bar'
url.protocol; // 'http:'
「?startIndex = 1&pageSize = 10」はそれ自体ではあまり使用できないため、おそらく検索URLパラメータも分解する必要があるでしょう。
上記の方法1(URL API)を使用した場合は、searchParamsゲッターを使用するだけです。
url.searchParams.get('startIndex'); // '1'
または、すべてのパラメータを取得するには:
function searchParamsToObj(searchParams) {
const paramsMap = Array
.from(url.searchParams)
.reduce((params, [key, val]) => params.set(key, val), new Map());
return Object.fromEntries(paramsMap);
}
searchParamsToObj(url.searchParams);
// -> { startIndex: '1', pageSize: '10' }
方法2(古い方法)を使用した場合は、次のようなものを使用できます。
// Simple object output (note: does NOT preserve duplicate keys).
var params = url.search.substr(1); // remove '?' prefix
params
.split('&')
.reduce((accum, keyval) => {
const [key, val] = keyval.split('=');
accum[key] = val;
return accum;
}, {});
// -> { startIndex: '1', pageSize: '10' }
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
おそらくページでそれをしていますか?指定されていない場合、現在の場所から「継承」されます
host
ありhostname
ます。前者にはポート(例:)が含まれ、localhost:3000
後者はホスト名(例:)のみlocalhost
です。
何らかの理由で、すべての答えはすべてやりすぎです。これがすべてです:
window.location.origin
詳細については、こちらをご覧ください:https : //developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
すでに述べたように、まだ完全にはサポートされていない window.location.origin
それを使用したり、使用する新しい変数を作成したりする代わりに、それを確認し、設定されていない場合は設定するようにします。
例えば;
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
私は実際にこれについて数か月前に書いていますwindow.location.originの修正
window.location.origin
実在するのは初めてです。ありがとうございました。^^
ホスト
var url = window.location.host;
戻り値 localhost:2679
ホスト名
var url = window.location.hostname;
戻り値 localhost
localhost/
代わりにとして表示されている理由を理解できませんでしたlocalhost:3000
。
protocolプロパティは、コロン(:)を含む現在のURLのプロトコルを設定または返します。
つまり、HTTP / HTTPS部分のみを取得したい場合は、次のようなことができます。
var protocol = window.location.protocol.replace(/:/g,'')
使用できるドメイン:
var domain = window.location.hostname;
使用できるポート:
var port = window.location.port;
URLに表示されない場合、ポートは空の文字列になることに注意してください。例えば:
ポートを使用していないときに80/443を表示する必要がある場合
var port = window.location.port || (protocol === 'https' ? '443' : '80');
なぜ使用しない:
let full = window.location.origin
確かに、window.location.originは標準に従ってブラウザーで正常に動作しますが、何を推測します。IEは標準に従っていません。
そのため、IE、FireFox、Chromeでこれが機能しました。
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
しかし、競合を引き起こす可能性のある将来の機能拡張のために、「ロケーション」オブジェクトの前に「ウィンドウ」参照を指定しました。
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
これが私が使っている解決策です:
const result = `${ window.location.protocol }//${ window.location.host }`;
編集:
ブラウザ間の互換性を追加するには、以下を使用します。
const result = `${ window.location.protocol }//${ window.location.hostname + (window.location.port ? ':' + window.location.port: '') }`;
window.location.host
、最高のクロスブラウザではないかもしれません
var getBasePath = function(url) {
var r = ('' + url).match(/^(https?:)?\/\/[^/]+/i);
return r ? r[0] : '';
};
正規表現(Regex)を使用してみてください。これは、ものを検証/抽出したり、JavaScriptで簡単な解析をしたりする場合に非常に役立ちます。
正規表現は:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
デモンストレーション:
function breakURL(url){
matches = /([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);
foo = new Array();
if(matches){
for( i = 1; i < matches.length ; i++){ foo.push(matches[i]); }
}
return foo
}
url = "https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"
breakURL(url); // [https, www.google.co.uk, 55699]
breakURL(); // []
breakURL("asf"); // []
breakURL("asd://"); // []
breakURL("asd://a"); // [asd, a, undefined]
これで検証もできます。
/**
* Get the current URL from `window` context object.
* Will return the fully qualified URL if neccessary:
* getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
* getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
* getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
*
* @param {boolean} [includeProtocol=true]
* @param {boolean} [removeTrailingSlash=false]
* @returns {string} The current base URL.
*/
export const getCurrentBaseURL = (includeProtocol = true, removeTrailingSlash = false) => {
if (!window || !window.location || !window.location.hostname || !window.location.protocol) {
console.error(
`The getCurrentBaseURL function must be called from a context in which window object exists. Yet, window is ${window}`,
[window, window.location, window.location.hostname, window.location.protocol],
)
throw new TypeError('Whole or part of window is not defined.')
}
const URL = `${includeProtocol ? `${window.location.protocol}//` : ''}${window.location.hostname}${
window.location.port ? `:${window.location.port}` : ''
}${removeTrailingSlash ? '' : '/'}`
// console.log(`The URL is ${URL}`)
return URL
}