可通过document.querySelectorAll('script')获取所有script标签并区分内外联脚本:外部脚本提取绝对URL,内联脚本读取textContent,动态插入未挂载的脚本不被包含,跨域脚本内容可能为空。

可以通过 document.querySelectorAll('script') 获取页面中所有 <script> 元素,再提取其源文件路径或内容。
获取所有 script 标签元素
这是最直接的方式,返回一个 NodeList,包含页面中所有 <script> 标签(包括内联脚本和外部脚本):
- 使用
document.querySelectorAll('script')获取全部 script 元素 - 遍历结果,用
el.src提取外部脚本的 URL;若src为空,则为内联脚本,可用el.textContent或el.innerText获取代码内容 - 注意:动态插入的脚本(如通过
document.createElement('script')添加但尚未 append 的)不会被包含在内
区分外部脚本与内联脚本
并非所有 script 标签都对应独立文件,需判断是否有 src 属性:
- 外部脚本:
script.src非空且以http://、https://、//或相对路径开头 - 内联脚本:
script.src为空字符串,但script.textContent.trim()有内容 - 模块脚本(
type="module")和异步脚本(async、defer)也适用相同判断逻辑
提取完整的脚本 URL(含绝对路径)
直接读 script.src 可能是相对地址,建议转为绝对 URL:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 利用
new URL(script.src, document.baseURI).href自动解析成完整地址 - 如果
script.src为空,跳过 URL 转换,只处理内联内容 - 对跨域脚本,
textContent可能为空(受 CORS 限制),此时无法读取实际代码
实用示例代码
以下函数返回一个数组,每个项包含脚本类型、URL(如适用)和内容摘要:
function getAllScripts() {
return Array.from(document.querySelectorAll('script')).map(script => {
const src = script.src;
const url = src ? new URL(src, document.baseURI).href : null;
const content = src ? '' : script.textContent.trim().substring(0, 100) + (script.textContent.length > 100 ? '...' : '');
return {
type: src ? 'external' : 'inline',
url,
content,
async: script.async,
defer: script.defer,
module: script.type === 'module'
};
});
}
调用 getAllScripts() 即可获得结构化信息,便于调试或审计。

















