2

虽然这个问题很相似,但这不是我要找的。

假设在 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 的名称?我必须<script>在 DOM 中定位元素并解析src属性还是有更好的方法?

编辑

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

4

3 回答 3

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;
}
于 2013-11-12T01:16:46.410 回答
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');

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

于 2013-11-12T01:14:59.030 回答
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

灵感来源:如何让外部 javascript 文件知道自己的主机?

于 2016-08-08T09:40:07.563 回答