调试到javascript匿名函数

问题描述:

我正在尝试反向工程Microsoft CRM 2011网页。该页面加载大量脚本和HTML。我目前的发展重点是页面上复选框元素的点击事件。单击该元素会导致页面上的行为发生变化,并且我希望遍历处理此操作的代码。调试到javascript匿名函数

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

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

+0

您可以在点击处理程序的代码块中设置断点。至于陷阱的实际点击事件...不知道 –

+0

你可以给你想要检查和复制的页面的链接? –

最好的办法是在控制台中运行以下命令:

document.getElementById('theCheckBoxId').onclick 

如果null出现在控制台,你可以继续阅读。否则,onclick处理程序和它的代码应该出现在控制台中。



使用Chrome的开发工具:右键点击页面上的东西 - >检查元素。你会看到: A screenshot of chrome dev tools

转到“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”事件侦听器代码,但通常这是乱码并且很难处理。

+1

我可能错了,但Microsoft Dynamics CRM可能只适用于Internet Explorer。如果那是真的,你会如何调试它? – icktoofay

+0

这是我不确定的一件事......如果它是一个网页,你应该一定能够检查出...认为他们使用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函数。这是我的建议。

  1. 打开Firefox中的Web应用程序
  2. 现有功能的复制源代码
  3. 格式,并在那里你想让它停下来检查变量的地方添加以下语句的功能。
  4. debugger;
  5. 将新代码粘贴到Firebug的控制台窗口中,然后单击Run ..就是这样!
+0

要复制现有函数的现有源代码,您需要运行我上面提到的命令'document.getElementById('checkBoxId')。onclick'它应该输出到控制台。如果函数被命名,你会看到'theFuncName();'你可以在其中使用开发工具搜索 –

+0

yes,这也可以工作,你可以点击Firebug中的Finder箭头,它会直接转到HTML组件你可以从那里找到脚本。 – RHT

+0

哦,在DOM检查标签中?我永远不会回想起那个..你指的是onclick属性吧? –