如何得到JavaScript文件所在的服务器域名
可以分两个步骤实现:
获得JavaScript文件的URL
现代浏览器均已支持 document.currentScript 属性,它会返回当前正在执行的脚本所在的script标签。所以我们可以很容易地获取当前脚本的URL:
const jsFileUrl = document.currentScript.src;
这里需要注意IE不支持此属性,你需要借助一个兼容库以支持IE。
解析URL字符串得到域名
在获得了JS文件URL之后,需要从字符串中解析得到域名。对于这个需求,我喜欢用URL构造函数来解决。我们可以把一个URL字符串传递给URL构造函数,然后返回的对象中含有一些有用的信息:
所以,我们可以用一行代码搞定,例如:
const getSrcHost = () => new URL(document.currentScript.src).hostname;
在一个完美的世界中,一切就是如此简单。不过还有一个不容忽视的浏览器 – IE,它不支持URL API!
首先我们要检查这个特征是否被当前浏览器支持,这是从 Modernizr 借鉴的代码:
执行 isURLAPIWorking() 函数之后,我们就得知了当前浏览器是否支持URL API。对于不支持的浏览器,我们需要借助于别的方式。你可能会首先想到用正则表达式匹配出域名,这是一个方案,不过存在许多技术难点。域名的后缀数量巨大而且还在不停增加中,这给开发维护带来了很大的工作量。
如下是另一种方案:
上面的代码借助于 a 标签的href属性,通过动态创建a标签的方式实现了动态解析。这种聪明的方式巧妙地利用了浏览器自身的特性,而且让我们的代码更简洁和易于维护。
我们把上述代码整理一下,代码如下:
希望本文对你有帮助。喜欢记得关注。