Мені потрібно витягнути повний протокол, домен та порт із заданої URL-адреси. Наприклад:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Мені потрібно витягнути повний протокол, домен та порт із заданої URL-адреси. Наприклад:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Відповіді:
спочатку отримайте поточну адресу
var url = window.location.href
Потім просто проаналізуйте цей рядок
var arr = url.split("/");
Ваш URL:
var result = arr[0] + "//" + arr[2]
Сподіваюсь, це допомагає
location
об’єкт недоступний (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-адреси поточної сторінки.
Ви можете використовувати API URL (не підтримується IE11, але доступний у будь-якому іншому місці ).
Це також полегшує доступ до пошукових парам . Ще один бонус: його можна використовувати в Web Worker, оскільки він не залежить від DOM.
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:'
Швидше за все, ви, ймовірно, захочете розірвати параметри URL-адреси пошуку, оскільки "? StartIndex = 1 & pageSize = 10" не є надто корисним самостійно.
Якщо ви використовували метод 1 (API API) вище, ви просто використовуєте пошукові параметри:
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
URLUtils
інтерфейс, визначений у WHATWG і включає origin
атрибут.
Як уже згадувалося, поки що не повністю підтримується, 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
.
window.location.origin
буде достатньо, щоб отримати те саме.
Властивість протоколу встановлює або повертає протокол поточної 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: '');
але для можливих майбутніх удосконалень, які можуть спричинити конфлікти, я вказав посилання "вікно" перед об'єктом "location".
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
може бути не найкращим крос-браузером
Спробуйте скористатися регулярним виразом (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
}