从我最近的问题,我已经创建了一些用于动态加载局部视图的JavaScript函数.所以,我无法调试任何动态加载JavaScript.因为所有加载的JavaScript都将通过"eval"函数进行评估.
但是,我找到了一些方法来创建新的JavaScript,使用以下脚本动态创建脚本到当前文档的标题.所有加载的脚本都将显示在HTML DOM中(您可以使用任何调试器来查找它).
var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";
document.getElementsByTagName('head')[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,大多数调试器(IE8 Developer Toolbar,Firebug和Google Chrome)都无法在任何动态脚本中设置断点.因为必须在加载页面后第一次加载可调试脚本.
您是否有动态脚本内容或文件调试的想法?
更新1 - 添加测试源代码
您可以使用以下xhtml文件来尝试调试someVariable值.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic Loading Script Testing</title>
<script type="text/javascript">
function page_load()
{
var script = document.createElement('script')
script.setAttribute("id", "dynamicLoadingScript");
script.setAttribute("type","text/javascript");
script.text = "var someVariable = 0;\n" +
"someVariable = window.outerWidth;\n" +
"alert(someVariable);";
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>
</head>
<body onload="page_load();">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
从答案来看,我只是在FireBug中测试它.结果应显示如下图像.
请查看页面加载后添加的"dynamicLoadingScript"脚本.
但是在FireBug的脚本选项卡中找不到它
更新2 - 在动态加载脚本中创建调试断点
上面两张图都显示插入"调试器"; 某些脚本行中的语句可以在动态加载脚本中触发断点.但是,两个调试器都不会在断点处显示任何代码.因此,这样做是没用的.
谢谢,
ice*_*bed 116
也可以使用铬.Chrome有一项功能,您可以在其中指定解析器属性,并使动态JS显示为一个文件,然后可以浏览并设置断点.
需要设置的属性是
//# sourceURL=dynamicScript.js
Run Code Online (Sandbox Code Playgroud)
其中dynamicScript.js是应该在脚本文件浏览器中显示的文件的名称.
更多信息在这里
Paul Irish还在他关于Tooling和Webapp Development Stack的精彩演讲中简要介绍了它
Jer*_*yal 17
是的,现在可以使用Google Chrome调试动态加载的JavaScript!
无需debugger;为动态加载的JS文件添加额外或任何其他属性.只需按照以下步骤进行调试:
我的技术主管刚刚展示了调试动态加载的Javascript方法的超级简单方法.
GetAdvancedSearchConditonRowNew举个例子,当我点击一个使用ajax调用的按钮时,我正在加载JS文件 .
network在谷歌浏览器开发工具中打开选项卡RetrieveAllTags?_=1451974716935)initiater,您将找到动态加载的JS文件(带前缀VM*). VM*文件以打开.Mol*_*Man 16
我为此目的使用谷歌浏览器.
在chrome at scripts选项卡中,您可以启用'暂停所有异常'

然后放在代码行中的某个位置try{throw ''} catch(e){}.Chrome会在到达此行时停止执行.
编辑:修改过的图像,这样我就能更清楚地了解它.
Kyl*_*son 10
我想你可能需要给eval'd代码一个"名字",如下所示:
http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
如果你这样做,我认为debugger"更新2" 的方法可能会起作用.
| 归档时间: |
|
| 查看次数: |
46823 次 |
| 最近记录: |