在Javascript中以任何方式知道从哪个主机脚本加载?

mbr*_*ort 11 javascript

在javascript中,作为从somer主机加载的脚本,有什么方法可以知道我从哪个服务器/主机加载?我需要向该主机发送额外的ajax请求,并且更愿意动态地找出主机.

因此,如果您在页面上包含javascript文件

<script src="http://somehost.com/js/test.js"></script>
Run Code Online (Sandbox Code Playgroud)

当javascript执行时,在test.js中......

var host_loaded_from = ??? // should be somehost.com 
Run Code Online (Sandbox Code Playgroud)

谢谢

Anu*_*rag 12

有什么方法可以知道从哪个服务器/主机加载?

是的,除非使用deferasync属性异步加载脚本,否则这是可能的,因为在这种情况下,DOM中的最后一个脚本可能不一定是当前正在执行的脚本.有关更多信息,请参阅@kangax的评论.

此外,最近发布了同样的问题.

在你的test.js中,获取最后一个脚本元素,它将是当前正在解析的脚本(在你的情况下是test.js),然后得到它src.

// test.js
var scripts = document.getElementsByTagName('script');
var src = scripts[scripts.length - 1].src;
Run Code Online (Sandbox Code Playgroud)

其中一个src被发现,使用正则表达式解析主机.

src.match(new RegExp('https?://[^/]*'))
["http://somehost.com"] // for your example
Run Code Online (Sandbox Code Playgroud)

  • 是的,我想是这样.当前的HTML5规范 - 在大多数情况下应该反映真实的浏览器行为 - 说:"如果两个属性都不存在(意思是"延迟"和"异步"),那么在用户代理继续之前,脚本会被提取并立即执行解析页面." 因此,当前执行的脚本实际上应该是文档中的最后一个脚本元素(因为解析在执行完成之前不能继续). (2认同)