Javascript获取文件主机的主机名

Javascript获取文件主机的主机名,javascript,hostname,Javascript,Hostname,虽然,这不是我要找的 假设在HostA.com上,我包含一个来自HostB.com的脚本: <script type="text/javascript" src="http://www.hostb.com/script.js"> 它将返回HostA.com而不是hosb.com,这显然是因为窗口对象的作用域所在 如何从脚本中获取HostB的名称?我必须在DOM中定位元素并解析src属性,还是有更好的方法 编辑 是的,它在我的服务器上,但也可能

虽然,这不是我要找的

假设在HostA.com上,我包含一个来自HostB.com的脚本:

<script type="text/javascript" src="http://www.hostb.com/script.js">
它将返回HostA.com而不是hosb.com,这显然是因为
窗口
对象的作用域所在

如何从脚本中获取HostB的名称?我必须在DOM中定位
元素并解析
src
属性,还是有更好的方法

编辑
是的,它在我的服务器上,但也可能在其他服务器上。我正在开发一个javascript插件,并且正在尝试创建绝对路径,这样它就不会尝试引用服务器上的文件,包括插件。

我正在加载带有RequireJS的脚本,看起来像这样:

<script data-main="http://hostb.com/js/app/main.js" src="http://hostb.com/js/vendor/require.js" type="text/javascript"></script>
$('script[data-main*="/js/app/main.js"]').attr('data-main')
返回:

http://hostb.com/js/app/main.js
http://hostb.com
我可以解析它的主机名

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');

这将使用运行的服务器的主机名构建一个绝对路径

方法如下:首先,将此作为脚本的第一行。我知道这是一个评论。无论如何都要做

//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;
}
函数findHost(){
var scripts=document.getElementsByTagName('script');
var thisScript=null;

为了(var i=0;i省略使用主机名两次(如您在“接受的答案”中所述),我实现了如下解决方案:

HostA.com上的HTML:

<script data-main="my_embed_id" src="http://hostb.com/js/vendor/require.js" type="text/javascript"></script>
// 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/js/app/main.js
http://hostb.com

灵感来源于:

如果是您的服务器,您可以在服务器端访问它,只需将其输出到提供给其他站点的脚本文件中即可。“我是否必须在DOM中找到元素并解析src属性?”是的,基本上就是这样。唉,我希望ECMAScript 6能解决这个问题。所以你想在脚本中加入来自另一个主机的代码,以确定它在哪个主机上?你可以访问脚本标记,如So->interest。这种方法比我的方法更可靠吗?不,不是,你的可能更好,但我不知道你能够dd属性。如果您不能控制主机上的代码,则此方法更可靠