Tôi cần trích xuất toàn bộ giao thức, tên miền và cổng từ một URL nhất định. Ví dụ:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Tôi cần trích xuất toàn bộ giao thức, tên miền và cổng từ một URL nhất định. Ví dụ:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Câu trả lời:
đầu tiên lấy địa chỉ hiện tại
var url = window.location.href
Sau đó, chỉ cần phân tích chuỗi đó
var arr = url.split("/");
url của bạn là:
var result = arr[0] + "//" + arr[2]
Hi vọng điêu nay co ich
location
không có đối tượng (js bên ngoài trình duyệt!)
location
) nhưng có thể được sử dụng cho bất kỳ url nào . Kiểm tra xem nó có gọn gàng không.
window.location.href.split('/').slice(0, 3).join('/')
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
about://
. Tuy nhiên, tôi tò mò muốn biết, trường hợp sử dụng để làm about:blank
gì? Tôi không chắc chắn nếu có bất kỳ trình duyệt nào bơm tài nguyên plugin vào about:blank
, nhưng có vẻ như đó có thể là trường hợp sử dụng duy nhất.
location
để làm việc này)
location.host
thay vì location.hostname
+ location.port
?
Không có câu trả lời nào trong số này dường như giải quyết hoàn toàn câu hỏi, trong đó yêu cầu một url tùy ý, không cụ thể là url của trang hiện tại.
Bạn có thể sử dụng API URL (không được IE11 hỗ trợ, nhưng có sẵn ở mọi nơi khác ).
Điều này cũng làm cho nó dễ dàng truy cập các thông số tìm kiếm . Một phần thưởng khác: nó có thể được sử dụng trong Công nhân web vì nó không phụ thuộc vào DOM.
const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Sử dụng cái này nếu bạn cần cái này để làm việc trên các trình duyệt cũ hơn.
// 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');
Trình phân tích cú pháp tích hợp của trình duyệt đã hoàn thành công việc của nó. Bây giờ bạn chỉ có thể lấy các phần bạn cần (lưu ý rằng điều này hoạt động cho cả hai phương pháp trên):
// 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:'
Rất có thể bạn cũng muốn phá vỡ các thông số url tìm kiếm, vì '? Start Index = 1 & pageSize = 10' không thể sử dụng quá nhiều.
Nếu bạn đã sử dụng Phương pháp 1 (API URL) ở trên, bạn chỉ cần sử dụng getters searchParams:
url.searchParams.get('startIndex'); // '1'
Hoặc để có được tất cả các tham số:
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' }
Nếu bạn đã sử dụng Phương pháp 2 (cách cũ), bạn có thể sử dụng một cái gì đó như thế này:
// 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
trang có lẽ? Nếu không được chỉ định, nó sẽ 'kế thừa' từ vị trí hiện tại
host
và hostname
. Cái trước bao gồm cổng (ví dụ localhost:3000
), trong khi cái sau chỉ là tên của máy chủ (ví dụ localhost
).
Vì một số lý do, tất cả các câu trả lời đều là quá mức cần thiết. Đây là tất cả những gì nó cần:
window.location.origin
Thông tin chi tiết có thể được tìm thấy ở đây: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properies
URLUtils
giao diện được xác định trên WHATWG và bao gồm origin
thuộc tính.
Như đã được đề cập, có một điều chưa được hỗ trợ đầy đủ window.location.origin
nhưng thay vì sử dụng nó hoặc tạo một biến mới để sử dụng, tôi thích kiểm tra nó và nếu nó không được đặt để đặt nó.
Ví dụ;
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
Tôi thực sự đã viết về điều này một vài tháng trước Một bản sửa lỗi cho window.location.origin
window.location.origin
là tồn tại. Cảm ơn bạn. ^^
tổ chức
var url = window.location.host;
trả lại localhost:2679
tên máy chủ
var url = window.location.hostname;
trả lại localhost
localhost/
thay vì localhost:3000
.
window.location.origin
sẽ là đủ để có được cùng.
Thuộc tính giao thức đặt hoặc trả về giao thức của URL hiện tại, bao gồm cả dấu hai chấm (:).
Điều này có nghĩa là nếu bạn chỉ muốn nhận phần HTTP / HTTPS, bạn có thể làm một cái gì đó như thế này:
var protocol = window.location.protocol.replace(/:/g,'')
Đối với tên miền bạn có thể sử dụng:
var domain = window.location.hostname;
Đối với cổng bạn có thể sử dụng:
var port = window.location.port;
Hãy nhớ rằng cổng sẽ là một chuỗi trống nếu nó không hiển thị trong URL. Ví dụ:
Nếu bạn cần hiển thị 80/443 khi bạn không sử dụng cổng
var port = window.location.port || (protocol === 'https' ? '443' : '80');
Tại sao không sử dụng:
let full = window.location.origin
Thật vậy, window.location.origin hoạt động tốt trong các trình duyệt theo tiêu chuẩn, nhưng hãy đoán xem. IE không tuân theo các tiêu chuẩn.
Vì vậy, đây là những gì làm việc cho tôi trong IE, FireFox và Chrome:
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
nhưng để cải tiến trong tương lai có thể gây ra xung đột, tôi đã chỉ định tham chiếu "cửa sổ" trước đối tượng "vị trí".
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
Đây là giải pháp tôi đang sử dụng:
const result = `${ window.location.protocol }//${ window.location.host }`;
BIÊN TẬP:
Để thêm khả năng tương thích trình duyệt chéo, hãy sử dụng như sau:
const result = `${ window.location.protocol }//${ window.location.hostname + (window.location.port ? ':' + window.location.port: '') }`;
window.location.host
có thể không phải là trình duyệt chéo tốt nhất
var http = location.protocol;
var slashes = http.concat("//");
var host = slashes.concat(window.location.hostname);
Hãy thử sử dụng một biểu thức chính quy (Regex), điều này sẽ khá hữu ích khi bạn muốn xác thực / trích xuất nội dung hoặc thậm chí thực hiện một số phân tích cú pháp đơn giản trong javascript.
Regex là:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Trình diễn:
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]
Bây giờ bạn có thể làm xác nhận là tốt.
Câu trả lời đơn giản phù hợp với tất cả các trình duyệt:
let origin;
if (!window.location.origin) {
origin = window.location.protocol + "//" + window.location.hostname +
(window.location.port ? ':' + window.location.port: '');
}
origin = window.location.origin;
/**
* 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
}