Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在浏览器中调试动态加载的JavaScript(使用jQuery)';调试器本身是什么?_Javascript_Debugging_Dynamic_Loaded - Fatal编程技术网

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

如何在浏览器中调试动态加载的JavaScript(使用jQuery)';调试器本身是什么?,javascript,debugging,dynamic,loaded,Javascript,Debugging,Dynamic,Loaded,动态添加的脚本未显示在浏览器的调试器的脚本部分中 说明: 我需要使用并且已经使用了 if( someCondition == true ){ $.getScript("myScirpt.js", function() { alert('Load Complete'); myFunction(); }); } 因此,myScript.js可以在满足某些条件时动态加载。。。 只有在加载整个脚本后才能调用myFunction 但是浏览器并没有在调试器的脚本部分

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

说明:

我需要使用并且已经使用了

if( someCondition == true ){
   $.getScript("myScirpt.js", function() {
       alert('Load Complete');
       myFunction();
   });
}
因此,myScript.js可以在满足某些条件时动态加载。。。 只有在加载整个脚本后才能调用myFunction

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


是否有其他方法可以实现所有目标,从而能够在浏览器中调试动态加载的脚本?

您可以为动态加载的脚本命名,以便在Chrome/Firefox JavaScript调试器中显示。为此,请在脚本末尾添加注释:

//# sourceURL=filename.js
然后,该文件将在“源”选项卡中显示为
filename.js
。根据我的经验,你可以在名称中使用,但如果使用/,我会有奇怪的行为

有关更多信息,请参阅:

我尝试使用OP建议的“//#sourceURL=filename.js”作为解决方法,但它仍然没有显示在“源”面板中,除非它已经存在于我的选项卡中,而之前它产生了异常


编写“debugger;”行迫使它在该位置中断。然后,一旦它出现在“源”面板的“我的”选项卡中,我就可以像普通一样设置断点并删除“debugger;”行。

注意,以这种方式出现在“源”选项卡中的源文件将出现在(无域)组中,如果您想调试它,您需要添加一个
调试器行在代码中,执行该行(通常在源文件开始执行时),然后在任何需要的地方添加断点

在调试生产阶段时,可能没有
调试器行在您的代码中,您可以通过使用CharlesProxy将本地映射到“插入debbuger行的源文件的新副本”来实现这一点。

您可以在脚本文件或脚本标记的末尾使用
/#sourceURL=
/#sourceMappingURL=


注意:
/@sourceURL
/@sourceMappingURL
不推荐使用。

在IE中尝试跟踪此类内容时,我打开开发工具(F12),然后使用控制台中的以下行找到断点的位置:

debugger;myFunction();

这将切换到debugger选项卡,您可以在其中进入
myFunction()
并设置断点

请注意,它已更改为//#,尽管//@在Chrome中仍然有效。html文件中的脚本也可以用同样的方式命名。小心!不要在“=”符号前后留空格。对我来说,js文件显示在名为“(无域)”的组中的源列表中。也许值得一提,因为我一开始就错过了!只是一个提示。Chrome调试器将这些伪javascript文件抛出到Sources选项卡中的“(无域)”节点元素中,至少在本地主机上调试时是这样。这就是我发现它们的地方。另一个需要注意的是评论风格。您给出的“对//@sourceURL的弃用”链接同时提到了“//#sourceURL=”和“/*#sourceURL=”。这是因为这也可以用于CSS,在CSS中必须使用块注释,因为单行“/”注释无效。令我惊讶的是,您不能在javascript中使用“/*sourceURL=”。它只是被忽略了。好吧,大多数JavaScript迷你程序都会从生产阶段删除这些行,这对生产错误诊断毫无用处。它也可能会出现在“源”选项卡下的(无域)列表中。我还需要使用
调试器,并且在加载脚本时必须打开DevTools。还有一点额外的信息:使用browsertools://作为协议,如
/#sourceURL=bro中所示wsertools://yourdomaingoeshere.com/action-openuwws.js
调试器可能重复使用
调试器
要在动态加载的脚本中自动停止,请参阅更多不推荐信息:当然,但是afaik大多数迷你们会在生产阶段删除这些行。这节省了我的时间!不管我做了什么,直到我输入调试器命令,文件才显示出来。之后,即使在我删除了调试器命令之后,它仍然会在页面重新加载和调试会话中保持不变。