gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:30:42 30 4
gpt4 key购买 nike

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

用例:我想看到任何 js 错误的警告窗口

类似于:

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

注意:我不会询问有关捕获异常的问题。

最佳答案

按照 link in my previous comment 上的说明进行操作, 我创建了一个 JSFiddle - Override Console methods .

我仍然不知道这是否是最好的方法,但这似乎可行。

编辑

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

window.onerror = function(error){
// do your stuff
}

以下是Updated JSFiddle .我还更新了代码片段以显示相同内容。

代码

var error = window.console.error,
log = console.log,
info = console.info,
warn = console.warn;
var lastLog = "",
lastError="",
lastInfo="",
lastWarn="";

function overrideConsole(){
console.error = function () {
lastError = arguments;
//alert(lastError);
print(lastError, "error")
error.apply(console, arguments);
};

console.log = function () {
lastLog = arguments;
print(lastLog, "log");
log.apply(console, arguments);
};

console.info = function () {
lastInfo = arguments;
print(lastInfo, "info");
info.apply(console, arguments);
};

console.warn = function () {
lastWarn = arguments;
print(lastWarn, "warn");
warn.apply(console, arguments);
};
}

function registerEvents(){
$("#btnError").on("click", function(){
console.error("new error");
});

$("#btnLog").on("click", function(){
console.log("new log");
});

$("#btnInfo").on("click", function(){
console.info("new info");
});

$("#btnWarn").on("click", function(){
console.warn("new warn");
});

$("#btnException").on("click", function(){
throw new Error();
});
}

function registerGlobalHandler(){
window.onerror = function(error) {
console.error(error);
};
}

function print(str, type){
var msgClass= "";

switch(type){
case "log": msgClass=" log"; break;
case "error": msgClass=" error"; break;
case "info": msgClass=" info"; break;
case "warn": msgClass=" warn"; break;
}
var div = "<div class='cell'>"+
"<label class='"+msgClass+"'>"+ str[0]+"</label>" +
"</div>"
$(".content").html( div + $(".content").html());
}

(function init(){
registerEvents();
registerGlobalHandler();
overrideConsole();

// Undefined function call
test();
})();
.cell{
width:90%;
position:relative;
padding:5px;
background: #eee;
}

.info{
color:blue;
}
.error{
color:red;
}
.warn{
color:green;
}
.log{
color:black;
}
.content{
width:90%;
height:300%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="btnError">Error</button>
<button id="btnLog">Log</button>
<button id="btnInfo">Info</button>
<button id="btnWarn">Warn</button>
<button id="btnException">Exception</button>

<div class="content"></div>

关于javascript - 在浏览器中订阅控制台事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369273/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com