8

我正在尝试调试一个非常复杂的 IE Intranet 应用程序。我收到一条带有自定义消息的警报,指出发生了异常。我想了解有关此异常的更多信息,因为该消息不是很有帮助。

有一个包含大量 iFrame 的母版页(如果有区别,还有 .htc 文件),所以我不认为我可以尝试劫持 window.alert。我最后的手段是通过文件搜索来试试我的运气。

使用 IE 8,我是否可以检测到此警报的来源?理想的解决方案是以某种方式创建一个“breakOnAlert”函数,该函数在正确的警报位置插入调试器语句。

澄清:母版页包含许多 iframe,我相信错误+警报来自其中之一。每个 iframe 都是一个 aspx 页面(有时带有来自用户的动态 html/javascript)并包含内联和外部 JavaScript。在发布之前,我确实尝试在我的页面(iframe 内的子页面)中覆盖警报,但它不起作用。我假设它不起作用,因为每个 iframe 都有自己的窗口对象,所以他们每个人都有自己的警报版本. 为此,我需要找到所有 iframe 并为每个 iframe 覆盖它,我认为这会非常复杂。在 IE 开发人员工具中,我可以看到大量脚本文件(内联和外部),因此手动查找其中的警报非常困难。

4

2 回答 2

5

由于在所有 iframe 中执行此操作确实很麻烦,因此我可能会使用Fiddler并以编程方式替换alert(为:

(function(n){alert(n);debugger;})(

IE 应该支持该debugger语句,所以你会有一个调用堆栈

本页解释了如何在 Fiddler 中进行文本替换

要添加到的 Fiddler 自定义规则示例OnBeforeResponse

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html"))
{
    oSession.utilDecodeResponse();
    var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
    oBody = oBody.replace(/alert\(/gi, "(function(n){alert(n);debugger;})(");
    oSession.utilSetResponseBody(oBody);
}
于 2012-04-10T02:30:24.993 回答
1

Ovveride 警报功能并在里面设置断点,然后您可以观看 Stack Trace :)

 function alert(message) {
     var x = 'whatever';
 }


 $(function () {
     alert('test');
 });
于 2012-04-09T08:53:08.310 回答