调试到javascript匿名函数
我正在尝试反向工程Microsoft CRM 2011网页。该页面加载大量脚本和HTML。我目前的发展重点是页面上复选框元素的点击事件。单击该元素会导致页面上的行为发生变化,并且我希望遍历处理此操作的代码。调试到javascript匿名函数
问题是复选框的点击处理程序在页面加载期间通过匿名方法附加。所以代码在那里,但试图找到它是要求人们在干草堆中找到针。
是否有一种技术使用Internet Explorer调试工具以某种方式使复选框单击时停止调试器?可能没有,但我想我会问。
最好的办法是在控制台中运行以下命令:
document.getElementById('theCheckBoxId').onclick
如果null
出现在控制台,你可以继续阅读。否则,onclick处理程序和它的代码应该出现在控制台中。
使用Chrome的开发工具:右键点击页面上的东西 - >检查元素。你会看到:
转到“SOURCES”(不再称为“脚本”),并有一个'||'如屏幕截图中所示,暂停按钮。如果页面没有失败,您可以选中该复选框,并且由于脚本已暂停,您将看到匿名功能的代码被突出显示,页面将被冻结。然后你可以使用这些工具来遍历代码。
然而,我们当然可以更好地帮助你与你实际上是从页想...
您也可以使用从控制台附加onbeforescriptexecute:https://developer.mozilla.org/en/DOM/element.onbeforescriptexecute 你会在这样的控制台:
document.getElementById('theCheckBoxId').onbeforescriptexecute = function (e) {
alert('hey same thing as pausing the script!');
console.error('script with this id about to run: ' + e.target.id);
//Could also try .src .innerText etc.
//Reference this: https://developer.mozilla.org/en/DOM/element.onbeforescriptexecute
//the full argument to checkout in the console:
console.error(e);
};
您也可以与currentScript方法玩:https://developer.mozilla.org/en/DOM/document.currentScript
你可以也右键单击并检查复选框,然后在开发工具的右侧面板中查看“Click”事件侦听器代码,但通常这是乱码并且很难处理。
我可能错了,但Microsoft Dynamics CRM可能只适用于Internet Explorer。如果那是真的,你会如何调试它? – icktoofay
这是我不确定的一件事......如果它是一个网页,你应该一定能够检查出...认为他们使用JScript(JavaScript的微软版本......)所以这可能是一个障碍。 –
这听起来像你没有办法修改与复选框单击事件绑定的匿名函数。如果没有,也许你可以创建第二个事件处理程序,但是在现有事件处理程序的定义之前定义它。
浏览器中的事件处理程序通常会按照它们定义的顺序触发。见http://jsfiddle.net/aroder/kkYfX/2/。如果您定义了自己的事件处理程序,它将为您提供一个地方,将调试程序附加到至少接近您要尝试通过的匿名函数的地方。
此外,使用调试器语句自动破坏你的代码。如果您使用IE,请确保未选中工具>选项>高级>禁用脚本调试(Internet Explorer)下的选项。
<script>
// the debugger statement will automatically break in IE dev tools, Firebug, and Chrome dev tools
debugger;
</script>
对于调试AJAX应用程序来说,旧版IE很特别。 Firebug是我见过的最好的。它可以让你用你自己的代替现有的javascript函数。这是我的建议。
- 打开Firefox中的Web应用程序
- 现有功能的复制源代码
- 格式,并在那里你想让它停下来检查变量的地方添加以下语句的功能。
debugger;
- 将新代码粘贴到Firebug的控制台窗口中,然后单击Run ..就是这样!
要复制现有函数的现有源代码,您需要运行我上面提到的命令'document.getElementById('checkBoxId')。onclick'它应该输出到控制台。如果函数被命名,你会看到'theFuncName();'你可以在其中使用开发工具搜索 –
yes,这也可以工作,你可以点击Firebug中的Finder箭头,它会直接转到HTML组件你可以从那里找到脚本。 – RHT
哦,在DOM检查标签中?我永远不会回想起那个..你指的是onclick属性吧? –
您可以在点击处理程序的代码块中设置断点。至于陷阱的实际点击事件...不知道 –
你可以给你想要检查和复制的页面的链接? –