如何用js得到当前域名信息?,js得到域名的方法

直接用一条代码拿到域名

window.location.hostname 获取当前页面的域名,这是前端开发中最直接、最常用的写法,兼容性极佳,在现代浏览器中没有任何问题。

const domain = window.location.hostname;
console.log(domain); // 输出类似 www.example.com

这段代码执行后返回的字符串,不包含协议头(http://)和端口号(8080),只保留域名部分,它已经是多数场景下的标准答案了。

js 获取当前域名的方法各种写法的取舍

上面给出的 window.location.hostname 是最主流的方案,但实际开发中,不同场景往往需要不同的写法,下面把几种常见方法拆开来讲。

用 window.location.host 获取带端口号的完整域名

window.location.host 返回的是域名加端口号的组合,这在本地开发调试时尤其常见。

const host = window.location.host;

比如你打开 http://localhost:3000,拿到的是 localhost:3000,如果你用 Vue 或 React 开发前端项目,localStorage 里存 token 时经常要用到这个值做CORS相关判断。

场景:后端接口调试时需要区分 localhost 和正式域名

很多前端新手在开发时,会直接把后端返回的接口路径写死,结果代码上线后接口全部失效,一个聪明的做法是,拿到当前域名后动态拼接接口地址:

const isDev = window.location.hostname === 'localhost';
const baseURL = isDev ? 'http://localhost:8080' : 'https://api.example.com';

用 window.location.href 手动解析

window.location.href 返回完整的 URL,包括协议、域名、路径、参数等,你需要用拆分的方式抠出域名:

const url = window.location.href;
const domain = url.split('/')[2];

这招在某后端传参场景中很管用,比如后端给前端发了一个跳转链接,前端需要判断该链接是不是本站域名的时候,用 split('/')[2] 能快速解决。

用正则提取域名(兼容各种杂乱的 URL 结构)

如果你的域名来自一个完整的 URL 字符串,而不是当前页面,正则表达式是更可靠的选择:

function extractDomain(url) {
  const match = url.match(/^(?:https?://)?(?:[^@n]+@)?([^:/n]+)/i);
  return match ? match[1] : null;
}

这个函数可以正确处理 https://user:pass@www.example.com:8080/path 这种带有认证信息的复杂 URL,不会被冒号误导,行业共识认为,正则提取在健壮性上远超字符串拆分。

表格对比:三种获取域名方式的适用场景

如何用js得到当前域名信息?,js得到域名的方法

表达式 返回值示例 包含端口 典型应用场景
window.location.hostname www.example.com 判断正式环境/测试环境、存cookie、域名白名单校验
window.location.host www.example.com:8080 本地开发调试、判断请求来源的具体端口
window.location.origin https://www.example.com:8080 是(含协议) 拼接口地址、做重定向、OAuth跳转回填

js 获取 localhost 域名的特殊细节

本地开发是另一套玩法。window.location.hostnamelocalhost 下返回的是 localhost,而在通过 IP 访问的情况下(168.1.100:3000),返回的是 IP 地址。

const currentDomain = window.location.hostname;
if (currentDomain === 'localhost' || currentDomain === '127.0.0.1') {
  console.log('本机环境');
}

有个细节容易被忽略:localhost0.0.1 从技术层面上讲是两个不同的 hostname,但指向同一个主机,当你用 0.0.0 启动某些 Node.js 开发服务器时,访问地址又变成了 168.x.x,这种情况在移动端真机调试时经常遇到。

在实际工作中,处理本地环境判断时建议把三种情况全部覆盖:localhost0.0.1本机局域网IP

多级子域名场景:js 获取域名的主域名部分

window.location.hostname 返回完整的主机名,blog.example.com,但有时候你只需要主域名 example.com,用来做跨子域名的 cookie 共享。

用 split 系列手法切割主域名

function getMainDomain(hostname) {
  const parts = hostname.split('.');
  if (parts.length > 2) {
    // 处理 www.example.com 这种格式,取后两段
    return parts.slice(-2).join('.');
  }
  return hostname;
}

这个方法在 www.example.com 下返回 example.com,在 blog.example.com 下也返回 example.com

多个子域名之间的数据互通(和 js 判断域名场景联动)

在同一主域名下的两个子域名 app.example.comadmin.example.com 之间共享登录状态时,可以设置 cookie 的 domain 为主域名:

document.cookie = "token=abc123; domain=.example.com; path=/";

这样就实现了跨子域名的登录态同步,值得注意的是(这里用一次),domain 必须带前导点 .example.com,否则浏览器会拒绝设置。

子域名下 JS 重定向到主域名的写法

const hostname = window.location.hostname;
if (hostname.startsWith('www.')) {
  window.location.href = `${window.location.protocol}//${hostname.replace('www.', '')}${window.location.pathname}`;
}

如何用js得到当前域名信息?,js得到域名的方法

这适用于你希望用户访问不带 www 的域名的情况,节省服务器处理 www 重定向的开销。

页面跳转和取域名相关的实用组合技

用 js 判断是不是某个域名的快捷判定

function isDomain(domain) {
  return window.location.hostname === domain || window.location.hostname.endsWith('.' + domain);
}

第一层判断直接相等,第二层判断覆盖了子域名的情况。

反向获取端口(配合 js 得到域名做完整 URL 拼接)

const protocol = window.location.protocol;   // "http:" 或 "https:"
const hostname = window.location.hostname;   // "www.example.com"
const port = window.location.port;           // "8080" 或空字符串
const fullURL = `${protocol}//${hostname}${port ? ':' + port : ''}`;

这套写法有点老道的地方在于:location.port 在非标准端口场景下返回字符串,如果没有指定端口则返回空字符串,这样拼接时就不会出现 undefined

动态设置接口请求的 baseURL

前端项目打包后部署到不同的域名上,接口地址不能写死,业内专家指出,最常见的做法是让后端提供配置文件,前端加载后动态计算域名:

fetch('/config.json').then(res => res.json()).then(config => {
  window.API_BASE = config.apiBase;
});

作为替代方案,前端也可以直接用 window.location.origin

const apiBase = window.location.origin + '/api';

这适用于后端接口和前端部署在同一域名下的情况,是目前最省心的方案。

域名获取的安全问题和边界情况

直接暴露在浏览器端的 JS 不存在真正意义上的”安全”,但严格校验域名可以在接口被非法调用时增加一道防线。

防止恶意请求前先校验白名单

const allowedDomains = ['www.example.com', 'admin.example.com', 'm.example.com'];
const currentDomain = window.location.hostname;
if (!allowedDomains.includes(currentDomain)) {
  window.location.href = 'https://www.example.com/error';
}

注意 getElementById 取到不同域名的情况

如果页面里嵌入了 iframe,在 iframe 内部取 window.location.hostname 拿到的是 iframe 自己的域名,不是父页面的,需要跨域时用 window.parent.location.hostname,但前提是父子页面同域,否则被浏览器拦截。

JS 域名不会做 DNS 解析

JavaScript 拿到的域名永远只是字符串,它不会帮你做 DNS 解析,这就要求你写代码时,拿到的域名必须和后端对得上,后端返回的数据里带着 api.example.com,前端注册了 serviceWorker 时,Service Worker 的

如何用js得到当前域名信息?,js得到域名的方法

scope 是受限于 CORS 的,不能随意跨域注册。

当域名和路径一起出现时的处理

有时候你的需求不止是域名,还有路径。https://example.com/user/profile ,你要把 /user/profile 也拿到。

const pathname = window.location.pathname;

这返回的是斜杠开头的完整路径,不少单页应用场景下,前端路由在 HTML5 history 模式下,需要自己拼出完整 URL:

const fullPath = window.location.pathname + window.location.search;

这种方法在处理页面统计、分享卡片等场景中非常实用。

从完整 URL 字符串中提取域名的特殊边界情况处理

如果字符串是 developer.mozilla.org 或者本机域名 http://localhost:8080/docs,用正则的时候要小心两点:

  • 协议头可能有也可能没有
  • 域名最后可能带着冒号端口,正则捕获组要正确处理
function cleanDomain(url) {
  return url.replace(/^https?:///, '').replace(/^www./, '').split(/[/:?#]/)[0];
}

这个写法把协议、www.、路径、端口和参数全部去掉,拿到的就是纯净的域名。

window.location.hostname 始终是 js 获取域名的最优解,适用于绝大多数业务场景,在需要判断开发环境、共享 cookie、处理子域名时选择 location.host 或正则辅助判断,localStorage 存域名配合后端接口做白名单校验,是实际开发中最常用的组合套路。

获取域名本身只是一个小 API,但和完整的 URL 拼接、跳转、接口请求联动起来,就变成了前端日常工程化中不可或缺的一环。

js 获取域名 常见问题 Q&A

如何用 js 获取当前页面域名且不带 www?

const domain = window.location.hostname.replace(/^www./, '');

这个代码在 www.example.com 下返回 example.com,在 example.com 下返回 example.com

js 获取域名和获取 URL 有什么本质区别?

window.location.href 返回整个 URL,包括 http://、路径、参数、锚点;window.location.hostname 只返回主机部分,如果你需要区分协议或端口,用 window.location.host 更精确。

在同一份代码里判断 localStorage 可用且域名正确怎么办?

localStorage 本身是按源(协议+域名+端口)隔离的,不同域名间不能互相读取,所以判断域名正确性的操作应该在写 localStorage 之前完成:

if (window.location.hostname === 'www.example.com') {
  localStorage.setItem('token', 'value');
} else {
  console.warn('当前域名不受信任');
}

这样可以在正式环境里屏蔽掉测试域名的数据污染。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/694391.html

(0)
上一篇 2026年8月20日 19:22
下一篇 2026年8月20日 19:23

相关推荐

  • 域名是骗局吗,新手域名投资常见的骗局有哪些

    域名本身不是骗局,但域名注册、续费、交易中的骗局确实存在,且目标明确,就是那些对域名规则不熟悉的新手和个人站长,域名注册时的常见陷阱域名注册是接触域名的第一关,也是骗局最容易发生的环节,很多用户在自己注册域名时,因为选择了不正规的注册商,或者被虚假宣传误导,最终付出了远高于市场价的成本,低价首年背后的高价续费部……

    2026年8月17日
    0183
  • 万网注册hk域名怎么样,万网注册hk域名需要注意什么

    在万网注册HK域名是企业和个人布局粤港澳大湾区市场、建立国际化品牌形象的关键战略步骤,其核心价值在于通过香港特有的地域标识增强用户信任度,同时结合稳定的云服务基础设施实现业务的快速落地与合规运营,HK域名作为香港地区的顶级域名,不仅代表着企业的本土化身份,更是通往亚太市场的重要数字资产,选择在万网(阿里云旗下品……

    2026年3月29日
    01594
  • 域名阻断究竟是什么技术?为何会导致网站无法访问?

    什么是域名阻断?域名阻断,又称域名解析阻断,是指在网络环境中,通过阻止域名解析来达到阻断网络访问的目的,就是通过阻止域名解析,使得用户无法通过域名访问到相应的网站,域名阻断的原因防止非法网站传播域名阻断可以有效地防止非法网站传播,如色情、赌博、暴力等不良信息,通过阻断这些网站的域名解析,用户无法访问这些网站,从……

    2025年11月26日
    06460
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 域名解析疑难为何出现未知主机?解析故障排查指南?

    揭秘未知主机背后的奥秘什么是域名解析?域名解析是互联网中一种将域名转换为IP地址的过程,当我们输入一个网址时,域名解析系统会将这个网址解析成对应的IP地址,从而找到对应的服务器,实现网页的访问,域名解析的工作原理DNS查询过程当用户输入一个域名时,首先会查询本地的DNS缓存,如果缓存中没有对应的IP地址,则会向……

    2025年12月12日
    03100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(2条)

  • 橙云7307的头像
    橙云7307 2026年8月20日 19:31

    读了这篇文章,我深有感触。作者对路径的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!

  • 酷暖8592的头像
    酷暖8592 2026年8月20日 19:31

    这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于路径的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!