凌晨三点的程序员小王盯着屏幕抓狂——刚上线的活动页面,用户在不同地区访问总是跳转到错误的分站。这场景是不是特眼熟?今天咱们就掰扯掰扯用JS获取域名的那些神操作,专治各种跳转错乱!
场景一:用户登录后总跑错分站
前两天我同事就栽在这事上:用户在北京访问自动跳上海站,在深圳访问又跳成都站。问题根源就在没准确获取当前域名,直接写死了跳转地址。
解决方案:
javascript**// 当前完整域名(含www)const fullDomain = window.location.hostname;// 主域名(适用于 xxx.com 或 www.xxx.com)const mainDomain = document.domain.includes('www.') ? document.domain.split('.')[1] : document.domain.split('.')[0];
举个栗子:用户在bj.xxx.com访问时,用这个方法就能准确提取"xxx"主域名,再动态拼接分站地址。
场景二:跨子域共享登录状态
用户登录了www站,进m站又要重新登录?这事儿搁谁都得骂街。关键点在于设置domain时没统一主域名:
javascript**// 正确姿势(允许所有子域共享cookie)document.cookie = `token=abc123; domain=.${mainDomain}; path=/`;// 错误示范(只能在www下使用)document.cookie = "token=abc123; domain=www.xxx.com";
场景三:动态加载第三方资源
搞活动要按地域展示不同广告?试试这样玩:
javascript**const regionMap = { 'bj': '北京专属优惠', 'sh': '上海特价套餐', 'gz': '广州限时福利'};// 提取子域前缀const subDomain = window.location.hostname.split('.')[0];// 动态渲染内容document.getElementById('ad').innerHTML = regionMap[subDomain] || '全国通用券';
四种获取方式大PK
方法 | 返回值示例 | 适用场景 | 坑点提醒 |
---|---|---|---|
window.location.href | https://bj.xxx.com/path | 需要完整URL时 | 包含参数和路径 |
window.location.hostname | bj.xxx.com | 精确获取域名 | 包含子域信息 |
document.domain | xxx.com | 跨子域通信 | 必须同主域 |
location.host | bj.xxx.com:8080 | 带端口号时使用 | 暴露测试端口 |
避坑三件套
本地测试总报错?
把localhost
加入域名白名单,或者临时修改hosts文件模拟真实域名总拿到undefined?
检查代码执行时机,DOM没加载完就获取会扑空跨域问题怎么破?
在服务端设置CORS头:Access-Control-Allow-Origin: https://${yourDomain}
搞了十年前端的老司机说句实在话:获取域名看着简单,实际藏着太多门道。特别是现在各种二级域名、CDN加速、反向代理混着用,更得注意区分hostname
和origin
。上个月我们项目就因为在Nginx配置里少写了个$host变量,导致三天损失了20万UV。
记住这个保命口诀:取域名先看场景,跨子域要设domain,动态拼接别写死,安全策略要卡严。下次再遇到页面乱跳转,照着这个思路查准没错!