虽然this question is similar,但这不是我要找的。 p>
我们在HostA.com上说我包含了一个来自HostB.com的脚本:
<script type="text/javascript" src="http://www.hostb.com/script.js">
当 script.js 运行时,我需要获取HostB的名称(我们假设它可以更改)。如果我使用:
var hostName = window.location.hostname;
它将返回 HostA.com 而不是 HostB.com ,因为这是window
对象的范围。
如何从脚本中获取HostB的名称?我是否必须在DOM中找到<script>
元素并解析src
属性,还是有更好的方法?
是的,它在我的服务器上,但也可能在其他服务器上。我正在开发一个javascript插件,我正在尝试制作绝对路径,因此它不会尝试引用服务器上的文件,包括插件。
答案 0 :(得分:2)
以下是如何:首先,将此作为脚本的第一行包含在内。我知道这是一个评论。无论如何要这样做
//BLAHBLAHBLAHBLAHAAABBBCCCDDDEEEFFFGGGILIKEPI
接下来,在该脚本中使用此函数来确定主机
function findHost(){
var scripts=document.getElementsByTagName('script');
var thisScript=null;
for(var i=0;i<scripts.length;i++){
if(scripts[i].innerHTML.indexOf('//BLAHBLAHBLAHBLAHAAABBBCCCDDDEEEFFFGGGILIKEPI')!==-1)
var thisScript=scripts[i];
}
var urlParser=document.createElement('a');
urlParser.href=thisScript.getAttribute('src');
return urlParser.hostname;
}
答案 1 :(得分:0)
我正在使用 RequireJS 加载脚本,如下所示:
<script data-main="http://hostb.com/js/app/main.js" src="http://hostb.com/js/vendor/require.js" type="text/javascript"></script>
我发现,在@adeneo的帮助下,我可以做到这样的事情:
$('script[data-main*="/js/app/main.js"]').attr('data-main')
返回:
http://hostb.com/js/app/main.js
我可以解析主机名。
var url = $('script[data-main*="/main.js"]').attr('data-main');
parser = document.createElement('a');
parser.href = url;
host = parser.hostname;
感谢您提出建议,并朝着正确的方向努力!
对于任何使用RequireJS(在搜索中发现此问题)并且需要能够使用脚本宿主加载绝对URL的人来说,这是一种更简单的方法:
var myCssPath = require.toUrl('css/mystyles.css');
使用正在运行的服务器的主机名构建绝对路径!
答案 2 :(得分:0)
要省略使用主机名两次(正如您在接受的答案中所描述的那样)我按如下方式实施了解决方案:
HostA.com 上的HTML:<script data-main="my_embed_id" src="http://hostb.com/js/vendor/require.js" type="text/javascript"></script>
HostB.com上的require.js :
// get host where this javascript runs
var url = $('script[data-main="my_embed_id"]').attr('src');
var hostb = url.replace(/(\/\/.*?\/).*/g, '$1');
返回:
http://hostb.com
灵感来自:How to make an external javascript file knows its own host?