You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中获取已加载脚本的URL?跨域脚本如何识别自身来源?

如何在JavaScript中获取已加载脚本的URL?跨域脚本能否知晓自身来源?

嘿,这两个问题在日常开发中挺实用的,我来给你详细拆解下:

一、获取已加载脚本的URL

分两种常见场景:获取当前执行脚本的URL,以及获取页面中所有已加载脚本的URL。

1. 获取当前执行脚本的URL

最直接的方式是用document.currentScript,它会返回当前正在执行的<script>元素,直接取它的src属性就能拿到脚本的加载URL:

// 在目标脚本内部执行这段代码
const myOwnUrl = document.currentScript.src;
console.log('我是从这个地址加载的:', myOwnUrl);

不过要注意,IE浏览器不支持document.currentScript,如果需要兼容老浏览器,可以通过错误栈来提取:

function getMyScriptUrl() {
  try {
    throw new Error();
  } catch (e) {
    // 从错误栈中解析出当前脚本的URL,不同浏览器栈格式略有差异
    const stackLines = e.stack.split('\n');
    // 通常第二行是当前脚本的调用信息
    const urlMatch = stackLines[1].match(/(https?:\/\/[^ \n]+)/);
    return urlMatch ? urlMatch[1] : null;
  }
}

// 调用后就能拿到当前脚本的URL
console.log(getMyScriptUrl());

2. 获取页面中所有已加载脚本的URL

你可以遍历document.scripts集合,这个集合包含了页面中所有的<script>元素,每个元素的src属性就是对应的脚本URL:

// 把所有脚本URL转成数组
const allScriptUrls = Array.from(document.scripts).map(script => script.src);
console.log('页面中所有已加载的脚本URL:', allScriptUrls);

二、跨域脚本能否知晓自身来源?

当然可以!比如你的mysite.com页面加载了anothersite.com的脚本,这个脚本在执行时,完全可以通过上面提到的document.currentScript.src获取到自己的加载地址(也就是anothersite.com的那个URL)。

这里不存在跨域限制,因为脚本是在自身执行上下文里访问自己对应的<script>元素的src属性,不属于跨域资源访问的范畴。哪怕脚本和页面域名不同,脚本内部依然能准确拿到自己的加载来源。


内容的提问来源于stack exchange,提问作者Ian Vink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:49:12