是否可以捕获所有类型的控制台错误? 实际上,我想将所有控制台错误都存储到数据库中,以便可以解决PHP网站的严重问题。
这是我当前的捕获错误的代码,但是此代码无法捕获内部服务器错误和其他错误,例如
www-widgetapi.js:99无法在“ DOMWindow”上执行“ postMessage”: 提供的目标原点('https://www.youtube.com')不匹配 收件人窗口的来源
我拥有的当前脚本
function ErrorSetting(msg, file_loc, line_no) {
var e_msg=msg;
var e_file=file_loc;
var e_line=line_no;
var error_d = "Error in file: " + file_loc +
"\nline number:" + line_no +
"\nMessage:" + msg;
if(logJsErrors){
theData = "file="+file_loc+"&line="+line_no+"&err="+msg;
ajaxCtrl(
function(){
return true;
},Helpers.RootURL()+"/logs/index",theData
);
}
if(isDebugging){
console.error(error_d);
}
return true;
}
window.onerror = ErrorSetting;
非常感谢您的努力。 谢谢:)
答案 0 :(得分:0)
您可以执行console.log
的一种原型,当您调用console.log
时会触发ajax,因此您可以执行以下操作:
(function () {
var postCons = console.log;
console.log = function (err) {
var xhttp = new XMLHttpRequest();
postCons.apply(this, arguments);
xhttp.open("POST", "log.php", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {//you could avoid this step
alert(this.responseText);//response from php
}
};
xhttp.send("data="+encodeURI(err));
}
})()
在log.php
中,您可以使用$_POST['data']
做任何您想做的事,也可以使用类似urldecode($_POST['data'])
的东西。