我需要从给定的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
const full = location.protocol + '//' + location.host;
没有一个答案完全回答了问题,该问题要求任意 url,而不是特定于当前页面的 url。
您可以使用 URL API(不支持 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'本身并不太可用。
如果您以上使用了方法一(URL API),您只需使用searchParams getters:
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' }
如果你使用的是Method 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' }
http
页面上进行吗?如果没有指定,它将从当前位置“继承”。 - Stijn de Wittsearch = search.substr(1);
怎么样?更安全和更快,因为它只创建了一个字符串而不是两个... - Alexis Wilke由于某些原因,所有答案都太过复杂。以下就是所需的全部:
window.location.origin
更多细节可以在这里找到:https://developer.mozilla.org/zh-CN/docs/Web/API/window.location#Properties
先获取当前地址。
var url = window.location.href
然后只需解析该字符串
var arr = url.split("/");
你的网址是:
var result = arr[0] + "//" + arr[2]
location
对象不可用(即在浏览器外的JavaScript中)。 - Thamme Gowdawindow.location.href.split('/').slice(0, 3).join('/')
,意思是获取当前网页的 URL,并只取前三个斜杠之间的部分,最后将它们用斜杠连接起来。 - Ryan McGearylocation.protocol
(https://caniuse.com/#feat=mdn-api_location_protocol)。当回答这个问题时,使用`location.protocol`是有意义的,现在你可以使用它。 - A1rPunwindow.location.origin
,但我不喜欢使用它或创建一个新变量来使用,而是更喜欢检查它,并在未设置时设置它。if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
我实际上在几个月前写过这个问题的解决方法,A fix for window.location.origin
window.location.origin
的存在。谢谢。^^ - EThaiZone主机
var url = window.location.host;
返回 localhost:2679
主机名
var url = window.location.hostname;
返回 localhost
localhost/
而不是 localhost:3000
。 - Tyler Youngblood为什么不使用:
let full = window.location.origin
window.location.origin
就足以得到相同的结果。
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');
的确,window.location.origin在遵循标准的浏览器中可以正常使用,但你知道吗?IE并没有遵循标准。
因此,在IE、FireFox和Chrome中,以下方法对我有效:
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
但是为了可能的未来增强功能可能会引起冲突,我在“location”对象之前指定了“window”引用。
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
about://
。不过,我很好奇about:blank
的使用场景是什么?我不确定是否有任何浏览器会在about:blank
中注入插件资源,但似乎这可能是唯一的使用情况。 - Sheflocation
上才能使它起作用。 - Nick Tlocation.host
д»Јжӣҝlocation.hostname
+location.port
еҗ—пјҹиҜ·жіЁж„ҸпјҢдёӨиҖ…зҡ„еҗ«д№үзӣёеҗҢгҖӮ - c24w