如何检测JavaScript警报的来源?

row*_*ow1 8 javascript internet-explorer

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

有一个包含大量iFrame的母版页(如果有所不同,则为.htc文件)所以我不认为我可以尝试劫持window.alert.我的最后一招是尝试文件搜索.

使用IE 8,无论如何我可以检测到此警报的来源?理想的解决方案是以某种方式创建一个"breakOnAlert"函数,该函数在正确的警报位置插入debbuger语句.

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

Mad*_*d0g 5

因为在所有iframe中都是一件真正的苦差事,所以我可能会使用Fiddler并以编程方式替换alert(为:

(function(n){alert(n);debugger;})(
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)