如何在浏览器的调试器本身中调试动态加载的JavaScript(使用jQuery)?

Twi*_*oiT 80 javascript debugging dynamic loaded

动态添加的脚本未显示在浏览器的调试器脚本部分中.

说明:

我需要使用并使用过

if( someCondition == true ){
   $.getScript("myScirpt.js", function() {
       alert('Load Complete');
       myFunction();
   });
}
Run Code Online (Sandbox Code Playgroud)

这样myScript.js可以在满足某些条件时动态加载...并且只有在加载完整个脚本后才能调用myFunction ...

但是浏览器没有在调试器的脚本部分显示动态加载的myScript.js.

是否有另一种方法可以实现所有目标,这将使人们能够在浏览器本身中调试动态加载的脚本?

Mar*_*ark 193

您可以为动态加载的脚本指定一个名称,以便在Chrome/Firefox JavaScript调试器中显示.为此,您可以在脚本末尾添加注释:

//# sourceURL=filename.js
Run Code Online (Sandbox Code Playgroud)

然后,此文件将在"源"选项卡中显示为filename.js.根据我的经验,你可以在名字中使用\,但如果使用/的话,我会得到奇怪的行为.

有关更多信息,请参阅: // @ sourceurl的动态JavaScript 弃用中的断点

  • 请注意,它已更改为//#,但// @仍可在Chrome中使用..html文件中的脚本也可以以相同的方式命名.小心!不要在'='之前和之后留下任何空白. (18认同)
  • 对我来说,js文件显示在名为"(无域名)"的组中的源列表中.可能值得一提,因为我一开始就错过了它! (9认同)
  • 由于这没有被标记为正确,我正在评论确认这实际上就像一个魅力. (6认同)
  • 只是一个提示.Chrome调试器会将这些伪javascript文件抛出到"源"选项卡中的"(无域)"节点元素中,至少在localhost上进行调试时.这就是我找到它们的地方. (6认同)
  • Afaik,大多数 JavaScript 压缩器从生产阶段删除这些行,使其对生产错误诊断无用。 (2认同)

xRa*_*her 13

您可以使用//# sourceURL=,并//# sourceMappingURL=在你的脚本文件或脚本标签的末尾.

注意: //@ sourceURL并且//@ sourceMappingURL已弃用.


kev*_*npo 11

我尝试使用OP建议作为解决方法的"//#sourceURL = filename.js",但它仍然没有在Sources面板中显示,除非它在我之前的选项卡中已经存在它产生了一个例外.

编写"调试器"; 线迫使它在那个位置断裂.然后,一旦它出现在Sources面板中的标签中,我可以设置正常的断点并删除"调试器"; 线.

  • 它也可能出现在"来源"选项卡下的(无域名)列表中. (4认同)
  • 一些额外的信息:使用 browsertools:// 作为协议,如 `//# sourceURL=browsertools://yourdomaingoeshere.com/action-openuwws.js` (2认同)

Llu*_*ñol 5

请注意,以这种方式出现在“源”选项卡中的源文件将出现在(无域)组中,并且,如果要调试它,则需要debugger;在代码中添加一行,使该行得以执行(通常在(开始执行源文件),然后在任何需要的地方添加断点。

如果您正在调试生产阶段,则debugger;代码中可能没有行,则可以通过使用CharlesProxy对“插入了debbuger行的源文件的新副本”进行本地映射来实现此目的。

  • 这救了我!不管我做了什么,直到我输入调试器命令,文件才显示出来。之后,即使在我删除了 debugger 命令之后,它仍然存在于页面重新加载和调试会话中。 (2认同)