调试成javascript匿名函数

时间:2011-09-20 19:50:46

标签: javascript dynamics-crm dynamics-crm-2011

我正在尝试对Microsoft CRM 2011网页进行逆向工程。该页面加载了大量脚本和HTML。我目前的开发重点是页面上复选框元素的click事件。单击该元素会导致页面上的行为发生变化,我想查看处理此问题的代码。

问题是在页面加载期间通过匿名方法附加了复选框的单击处理程序。所以代码在那里,但试图找到它是要求人们在大海捞针中找到针。

是否有一种技术使用Internet Explorer调试工具以某种方式使调试器在单击复选框时停止?可能没有,但我想我会问。

3 个答案:

答案 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处理程序及其代码应该出现在控制台中。


<小时/> 使用Chrome的开发工具:右键点击页面上的内容 - &gt;检查元素。你会看到这个: A screenshot of chrome dev tools

转到“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函数。这就是我的建议。

  1. 在Firefox中打开Web应用程序
  2. 复制现有功能的源代码
  3. 对其进行格式化,并将以下语句添加到要停止的位置的函数并检查变量。
  4. debugger;
  5. 将新代码粘贴到Firebug的控制台窗口中,然后单击Run ..就是这样!