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

Chromium是否向V8传递URL与JS?及V8源码提取JS关联URL咨询

获取JS脚本关联URL的方法(V8/Chromium层面)

一、从V8的Parser/Scanner中提取URL

你可以直接在parsing.cc中通过当前解析上下文的ParseInfo对象获取关联的Script实例,进而拿到source_url:

  • 在你添加打印源码的位置(比如ParseProgram或ParseTopLevel函数内),先获取ParseInfo对象
  • 通过parse_info.script()拿到对应的Script实例
  • 调用Script的source_url()方法获取URL字符串,转成UTF8格式打印

示例代码:

// 确保你已经拿到ParseInfo实例(比如函数参数中的parse_info)
v8::Isolate* isolate = parse_info.isolate();
v8::Handle<v8::Script> script = parse_info.script();
if (!script.IsEmpty()) {
  v8::Handle<v8::String> source_url = script->source_url();
  if (!source_url.IsEmpty()) {
    v8::String::Utf8Value url_str(isolate, source_url);
    printf("关联URL: %s\n", *url_str);
  } else {
    printf("无关联URL\n");
  }
}

如果要在scanner.cc中获取,需要从Scanner关联的ParseInfo入手——Scanner的构造通常会传入ParseInfo或相关的源上下文,你可以通过scanner->parse_info()(如果已有该方法)获取实例,再按上面的流程提取URL。

二、V8内部无法获取时,Chromium层面的查找位置

如果V8的Parser/Scanner上下文没有保留URL(比如某些动态生成的脚本),可以在Chromium的以下模块查找:

  • Blink层的ScriptLoader:负责加载外部脚本,会记录脚本的原始URL,在创建V8 Script时将URL传入。代码路径:third_party/blink/renderer/core/script/script_loader.cc
  • V8脚本执行入口:Chromium中创建V8 Script的逻辑在third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc,这里会处理脚本的URL参数,传递给V8的ScriptBuilder
  • 内联脚本的关联URL:对于页面内的内联脚本,其关联URL通常是当前页面的URL,可以从Blink的Document对象获取,代码路径:third_party/blink/renderer/core/dom/document.cc,调用document->Url().GetString()即可拿到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:42:25