我有一个其他人在我们的主机网站上请求的脚本。我有多个环境(开发/测试/生产),在我的脚本中,我想知道它已被加载的环境。
例如,我在以下网站上提供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
};
我该如何做到这一点?
答案 0 :(得分:1)
我很难理解你真正追求的是什么,但你可以循环遍历所有脚本并解析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') );
答案 1 :(得分:1)
如果不对服务脚本的方式进行一些更改,我认为这是不可能的。我相信您需要将主机名硬编码到脚本声明的某个变量中,并在脚本文件从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
进行内省。
答案 2 :(得分:0)
如果您希望env依赖于脚本的路径,而不是包含它的页面,那么window.location
将不起作用。您可以做的是为每个env使用不同的js脚本,其中包含自定义getHost()
函数,即:
var getHost = function () {
return "dev";
}
为了避免使用多个脚本的开销,您可以在服务器端动态生成此附加功能。
您也可以要求用户自己定义环境,即:
MyApp.config.env = 'dev';
答案 3 :(得分:-1)
来自window.location
的Mozilla开发者网站参考:
window.location.hostname // the host name (without the port number or square brackets)