javascript – 如何发送控制台消息和错误以提醒?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何发送控制台消息和错误以提醒?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2731字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何发送控制台消息和错误以提醒?](/upload/InfoBanner/zyjiaocheng/708/723e21eda0d94482a5346482d7caf79a.jpg)
我想将错误传递给警报,以警告用户他们在代码中犯了错误,即使他们没有打开控制台.
var doc=(frame.contentWindow.document || obj.contentDocument|| obj.contentWindow);
var head = doc.getElementsByTagName('head')[0];
var scriptElement = doc.createElement('script');
scriptElement.setAttribute('type', 'text/javascript');
scriptElement.text = scripts;
try{
head.appendChild(scriptElement);
}
catch(e){ alert("error:"+e.message +" linenumber:"+e.lineNumber);}
当脚本包含错误时,appendChild会抛出错误.它直接进入控制台,我希望它显示在警报中,因为它适用于孩子,他们可能不会检查控制台. try catch块不会捕获错误.
我用eval(脚本)试了一下.
try{
eval(scripts);} catch(e){ alert("error:"+e.message +" linenumber:"+e.lineNumber);}
这确实有效,但这意味着代码执行了两次,这在某些情况下非常不方便.
我试过猴子修补console.error:
console.log=function(){alert("taking over the log");}
console.error=function(){alert("taking over the log");}
但这只有在我真正使用console.error时才有效.不是在抛出实际错误时.
如果不是console.error,在真正的错误情况下,什么函数将错误发送到控制台?我可以访问并更改它吗?
有任何想法吗?帮助将非常感激.
谢谢Jenita
解决方法:
虽然try … catch将对脚本最初运行的代码起作用,因为Jenita说它不会捕获语法错误,并且它也不会捕获稍后执行的回调函数抛出的错误(在try-catch之后很久)已完成).这意味着传递给setTimeout或addEventListener的任何函数都没有错误.
但是,您可以尝试不同的方法.在窗口上注册一个错误监听器.
window.addEventListener("error", handleError, true);
function handleError(evt) {
if (evt.message) { // Chrome sometimes provides this
alert("error: "+evt.message +" at linenumber: "+evt.lineno+" of file: "+evt.filename);
} else {
alert("error: "+evt.type+" from element: "+(evt.srcElement || evt.target));
}
}
当从回调函数抛出异常时,将调用此方法.但它也会触发一般的DOM错误,例如图像无法加载,您可能对此不感兴趣.
它也应该触发语法错误,但前提是它能够先运行,所以你应该将它放在一个可能包含错别字的单独脚本中! (稍后脚本中的语法错误将阻止同一脚本顶部的有效行运行.)
不幸的是,我从未找到过在Firefox中获取evt的行号的方法. (编辑:逛逛,我想现在可能就在那里.)
我在尝试编写FastJSLogger时发现了这一点,这是一个页面记录器,当浏览器devtools有点慢时我用它.
不顾一切地抓住行号,我started to experiment使用了setTimeout和addEventListener的包装器,它们会在这些调用周围重新引入try-catch.例如:
var realAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function(type,handler,capture,other){
var newHandler = function(evt) {
try {
return handler.apply(this,arguments);
} catch (e) {
alert("error handling "+type+" event:"+e.message +" linenumber:"+e.lineNumber);
}
};
realAddEventListener.call(this,type,newHandler,capture,other);
};
显然,这应该在注册任何事件监听器之前完成,甚至可能在加载jQuery之类的库之前完成,以防止它们在我们能够替换之前获取对真实addEventListener的引用.
内容总结
以上是互联网集市为您收集整理的javascript – 如何发送控制台消息和错误以提醒?全部内容,希望文章能够帮你解决javascript – 如何发送控制台消息和错误以提醒?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。