如何检测URL中是否存在demo子域名?
实现检测demo子域名的方法
当前代码的问题
window.location.hostname返回的是不带协议(https://)的主机名,比如demo.stackoverflow.com,和https://demo.stackoverflow.com/直接全等匹配永远不会成立- 只能匹配单个固定域名,无法覆盖
demo.stacks.com、demo.hello.com这类符合条件的地址
正确实现方式
方法1:正则表达式匹配
用正则检测主机名是否以demo.开头,能覆盖所有以demo作为子域名的情况:
function hasDemoSubdomain() { // 匹配以demo.开头的主机名 return /^demo\./.test(window.location.hostname); } // 使用示例 if (hasDemoSubdomain()) { const script = document.createElement('script'); script.src = './script.min.js'; document.body.appendChild(script); }
注:这里改用
createElement创建脚本,比document.write更符合现代前端规范,避免阻塞页面渲染和潜在的DOM问题
方法2:拆分主机名检测
把主机名分拆成子域名部分,判断第一个部分是否为demo:
function hasDemoSubdomain() { const parts = window.location.hostname.split('.'); // 确保至少有二级域名,且第一个部分是demo return parts.length >= 2 && parts[0] === 'demo'; } // 使用示例 if (hasDemoSubdomain()) { const script = document.createElement('script'); script.src = './script.min.js'; document.body.appendChild(script); }
说明
两种方法都能满足需求:
- 当URL是
https://demo.stackoverflow.com/、https://demo.stacks.com/或https://demo.hello.com/时,返回true - 当URL是
https://stackoverflow.com/这类不含demo子域名的地址时,返回false
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

