从请求脚本的位置获取主机
Get host from where script has been requested
我有一个脚本,其他人在他们的网站上向我的主机请求。我有多个环境(dev/test/production),在我的脚本中,我想知道加载它的环境。
例如,我在以下站点为script.js
提供服务(所有站点的文件都相同):
dev.mysite.com/script.js
test.mysite.com/script.js
www.mysite.com/script.js
有人将我的脚本加载为:
<script src="dev.mysite.com/script.js"></script>
因此,在script.js
中,我希望有一些代码能够获得请求脚本的主机:
var getHost = function() {
var host = // host from where it has been requested
return host; // in this case it should return dev.mysite.com
};
我怎样才能做到这一点?
我很难理解您真正想要的是什么,但您可以遍历所有脚本并解析src
。
jQuery:
function getHosts(scriptName){
var hosts = [];
scriptName = scriptName.replace(/([.])/g,"''$1"); // escape special characters
$('script').each(function(){
var _src = this.src;
if ( RegExp(scriptName).test(_src) ){
_src = _src.replace(/^https*:'/'//,''); // remove protocol
_src = _src.replace(/'/.*$/,''); // remove rest of path
hosts[hosts.length] = _src; // store it for return
}
});
return hosts; // return results as array
}
alert( getHosts('script.js').join(',') );
不带jQuery:
function getHosts(scriptName){
var hosts = [];
scriptName = scriptName.replace(/([.])/g,"''$1"); // escape special characters
var scripts = document.getElementsByTagName('script');
for (var n=scripts.length;n--;){
var _src = scripts[n].src;
if ( RegExp(scriptName).test(_src) ){
_src = _src.replace(/^https*:'/'//,''); // remove protocol
_src = _src.replace(/'/.*$/,''); // remove rest of path
hosts[hosts.length] = _src; // store it for return
}
}
return hosts; // return results as array
}
alert( getHosts('test.js').join(''n') );
我认为如果不对脚本的服务方式进行一些更改,这是不可能的。我认为您需要将主机名硬编码到脚本声明的某个变量中,并在脚本文件从dev
到test
再到www
时进行更改。或者,您可以使用例如PHP动态插入值。
示例:在您的脚本中,您将拥有类似的内容
var myscript = {
// declare a 'namespace'
stage = '__STAGE_PLACEHOLDER__';
myfunc = function(args) {
...
}
// your code goes here
};
在服务之前,将__STAGE_PLACEHOLDER__
替换为dev
/test
/www
,然后可以使用myscript.stage
进行内省。
如果您希望env依赖于脚本的路径,而不是包含它的页面,那么window.location
将不起作用。您可以为每个env创建一个不同的js脚本,其中包含一个自定义的getHost()
函数,即:
var getHost = function () {
return "dev";
}
为了避免拥有多个脚本的开销,您可以在服务器端动态生成此附加函数。
您也可以要求用户自己定义环境,即:
MyApp.config.env = 'dev';
来自Mozilla开发者网站window.location
:参考
window.location.hostname // the host name (without the port number or square brackets)
相关文章:
- 使用 javascript 从本地主机服务获取数据
- 获取主机 URL + 目标 URL 的时间
- 从服务器/主机获取HTML代码或显示广告代码
- 如何在angular JS中获取基本主机
- 单击时获取 href 的顶部主机名
- javascript 获取文件主机的主机名
- 在节点/快递中获取客户端主机名
- 如何在实用程序文件中获取已启动的快速应用程序的服务器主机和端口
- 从新创建的窗口中获取位置主机名
- 通过JS regex获取具有/en/的主机名
- Node.js-在AmazonEC2上获取主机IP地址
- 使用regex获取带点的主机名
- 使用本地主机/同一主机的http模块获取请求
- 获取使用主机名获取URL的脚本
- 从请求脚本的位置获取主机
- 客户端系统主机名未使用request.getRemoteHost()获取
- 如何获取来自不同主机的表的特定单元格的值
- 从NodeJS请求获取主机
- Ajax调用Php脚本以获取base64字符串中的图像,该字符串可在本地主机上工作,但不能从托管服务器中获取
- JS:从url获取主机名,正则表达式不工作