我正在尝试对Microsoft CRM 2011网页进行逆向工程。该页面加载了大量脚本和HTML。我目前的开发重点是页面上复选框元素的click事件。单击该元素会导致页面上的行为发生变化,我想查看处理此问题的代码。
问题是在页面加载期间通过匿名方法附加了复选框的单击处理程序。所以代码在那里,但试图找到它是要求人们在大海捞针中找到针。
是否有一种技术使用Internet Explorer调试工具以某种方式使调试器在单击复选框时停止?可能没有,但我想我会问。
答案 0 :(得分:3)
听起来你无法修改与复选框点击事件相关联的匿名函数。如果没有,也许您可以创建第二个事件处理程序,但在现有事件处理程序的定义之前定义它。
浏览器中的事件处理程序通常按照定义的顺序触发。见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>
答案 1 :(得分:3)
最好的办法是在控制台中运行:
document.getElementById('theCheckBoxId').onclick
如果控制台中出现null
,您可以继续阅读。否则,onclick处理程序及其代码应该出现在控制台中。
转到“SOURCES”(不再称为“Scripts”)并且有一个'||'如屏幕截图所示,暂停按钮。如果页面没有失败,您可以选中复选框,并且由于脚本已暂停,您将看到匿名函数的代码突出显示,页面将被冻结。然后,您可以使用这些工具逐步完成代码。
但是,我们当然可以更好地帮助您从页面中实际获得的内容......
您还可以使用从控制台附加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”事件侦听器代码,但这通常是乱码并且难以使用。
答案 2 :(得分:1)
在调试AJAX应用程序时,旧版IE非常蹩脚。 Firebug是我见过的最好的。它允许您用自己的javascript函数替换现有的javascript函数。这就是我的建议。
debugger;