Answers:
首先获取当前地址
var url = window.location.href
然后只需解析该字符串
var arr = url.split("/");
您的网址是:
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 API(IE11不支持,但在其他任何地方都)。
这也使得访问搜索参数变得容易。另一个好处是:由于它不依赖DOM,因此可以在Web Worker中使用。
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'本身不太有用。
如果您使用上面的方法1(URL API),则只需使用searchParams getter:
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在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: '');
但是对于将来可能引起冲突的增强功能,我在“位置”对象之前指定了“窗口”引用。
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
}