Javascript获取文件主机的主机名

时间:2013-11-12 01:01:01

标签: javascript hostname

虽然this question is similar,但这不是我要找的。

我们在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插件,我正在尝试制作绝对路径,因此它不会尝试引用服务器上的文件,包括插件。

3 个答案:

答案 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?