Javascript 在浏览器中订阅控制台事件

Javascript 在浏览器中订阅控制台事件,javascript,browser,Javascript,Browser,有没有办法从页面上的javascript订阅某个控制台事件 用例:我希望看到关于任何js错误的警报窗口 比如: console.on('error', => alert('There is an error! Look in console window')) console.on('log', => alert('Something log to console')) NB:我不要求捕捉异常 按照上的说明,我创建了一个 我仍然不知道这是否是最好的方法,但这似乎有效 编辑 经过讨论

有没有办法从页面上的javascript订阅某个控制台事件

用例:我希望看到关于任何js错误的警报窗口

比如:

console.on('error', => alert('There is an error! Look in console window'))
console.on('log', => alert('Something log to console'))

NB:我不要求捕捉异常

按照上的说明,我创建了一个

我仍然不知道这是否是最好的方法,但这似乎有效

编辑 经过讨论,我明白了,问题不仅仅在于捕获所有控制台消息,还在于捕获任何未处理的错误。据我所知,实现的唯一方法是添加一个全局异常处理程序

window.onerror = function(error){
    // do your stuff
}
以下是报告。我还更新了代码片段以显示相同的内容

代码
var error=window.console.error,
log=console.log,
info=console.info,
warn=console.warn;
var lastLog=“”,
lastError=“”,
lastInfo=“”,
lastWarn=“”;
函数overrideConsole(){
console.error=函数(){
lastError=参数;
//警报(最后一个错误);
打印(上次错误,“错误”)
错误。应用(控制台、参数);
};
console.log=函数(){
lastLog=参数;
打印(最新日志,“日志”);
log.apply(控制台、参数);
};
console.info=函数(){
lastInfo=参数;
打印(lastInfo,“信息”);
应用(控制台、参数);
};
console.warn=函数(){
lastWarn=参数;
打印(最后警告,“警告”);
warn.apply(控制台、参数);
};
}
函数registerEvents(){
$(“#b错误”)。在(“单击”,函数()上){
控制台错误(“新错误”);
});
$(“#btnLog”)。在(“单击”,函数(){
控制台日志(“新日志”);
});
$(“#btnInfo”)。在(“单击”,函数(){
控制台信息(“新信息”);
});
$(“#btnWarn”)。在(“单击”,函数(){
控制台警告(“新警告”);
});
$(“#btnException”)。在(“单击”,函数()上{
抛出新错误();
});
}
函数registerGlobalHandler(){
window.onerror=函数(错误){
控制台错误(error);
};
}
功能打印(str,类型){
var msgClass=“”;
开关(类型){
案例“log”:msgClass=“log”;中断;
案例“错误”:msgClass=“error”;中断;
案例“信息”:msgClass=“info”;中断;
案例“警告”:msgClass=“警告”中断;
}
var div=“”+
“”+str[0]+“”+
""
$(“.content”).html(div+$(.content”).html();
}
(函数init(){
registerEvents();
registerGlobalHandler();
重写console();
//未定义的函数调用
test();
})();
.cell{
宽度:90%;
位置:相对位置;
填充物:5px;
背景:#eee;
}
.info{
颜色:蓝色;
}
.错误{
颜色:红色;
}
.警告{
颜色:绿色;
}
.日志{
颜色:黑色;
}
.内容{
宽度:90%;
身高:300%;
}

错误
日志
信息
警告
例外情况

正如已经指出的,没有全局方式(据我所知)订阅控制台事件。日志记录的部分解决方案是按照@Rajesh的回答覆盖控制台

对于错误检查,如果您拥有要检查错误的代码,则可以将整个代码包装在全局
try/catch

试试看{
(功能(){
函数失败代码(){
var a;
返回a.foo+1;
}
失败代码();
})();
}
捕捉(错误){
警报(“错误”);
犯错误;
}

对于第三方脚本,除了通过类似的机制加载脚本之外,我想不出任何处理方法。我不清楚如果该脚本本身加载其他脚本会发生什么。

可能重复。请参考:不,它不是一个复制品。至少在chrome控制台上没有这样的东西。对于后者,只需将
console.log
重新定义为您自己的函数(然后将其应用于对原始函数的已保存引用),对于错误,如果错误导致脚本执行停止,则更难使用脚本进行处理……您可以尝试以下操作。显示的一种方法是覆盖console.log本身。但我不知道这是正确的方法。我指的是真正的错误(而不是错误信息)。尝试在第页的某个地方求值:``var a={};a、 乐趣();`您看到任何错误了吗?据我所知,通过
控制台
记录的任何内容都将被捕获。您提到的案例将不会被捕获,因为它是未处理的异常。同样的。对于这种情况,你必须处理它们。这就是全局异常处理程序发挥作用的地方。我想这可能会有帮助。