我正在尝试调试非常复杂的IE Intranet应用程序。我收到一条警告,其中包含一条自定义消息,指出发生了异常。我想了解有关此异常的更多信息,因为消息不是很有帮助。
有一个包含大量iFrame的母版页(如果有所不同,则为.htc文件)所以我认为我不能尝试hijack window.alert。我的最后一招是试试文件搜索。
使用IE 8,无论如何我可以检测到此警报的来源?理想的解决方案是以某种方式创建一个“breakOnAlert”函数,在正确的警报位置插入一个debbuger语句。
澄清:主页包含许多iframe,我相信错误+提醒来自其中一个。每个iframe都是一个aspx页面(有时使用来自用户的动态html / javascript)并包含内联和外部JavaScript。在发布之前,我确实尝试在我的页面(iframe中的子页面)中覆盖 alert ,但它不起作用。 我假设它不起作用,因为每个iframe都有自己的窗口对象,所以每个iframe都有自己的 alert 版本。为了实现这个目的,我需要找到所有的iframe并为每个iframe覆盖它,我觉得这样做很复杂。在IE开发人员工具中,我可以看到大量的脚本文件(内联和外部),因此在那里手动查找警报非常困难。
答案 0 :(得分:5)
因为在所有iframe中执行它是一项真正的苦差事,所以我可能会使用Fiddler并以编程方式将alert(
替换为:
(function(n){alert(n);debugger;})(
IE应该支持debugger
语句,因此你有一个调用堆栈
This page解释了如何在Fiddler中进行文本替换
要添加到OnBeforeResponse
的Fiddler自定义规则示例:
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);
}
答案 1 :(得分:1)
覆盖警报功能并在里面设置断点,然后你可以观看Stack Trace:)
function alert(message) {
var x = 'whatever';
}
$(function () {
alert('test');
});