对我来说,写入文件听起来像是一项繁琐的任务。它需要浏览器代码通常没有的权限,并且您必须与一个插件进行协商,以便访问文件I/O。
从我的理解中,您的问题是
我想让Firefox记录所有错误
我们可以采用几种方法来解决这个问题
第一种方法 - 也将所有内容记录到localStorage:
现在,您可以将内容写入localStorage
或IndexedDB
,而不是写入实际文件。
localStorage["myApplog"] = localStorage["myApplog"] || "";
var oldLog = console.log;
console.log = function(){
oldLog.apply(console,arguments);
var message = "\n "+(new Date).toISOString() + " :: "+
Array.prototype.join.call(arguments," , ");
localStorage["myApplog"] += message;
}
这个方法比较繁琐且速度较慢,但可以完成工作,你可以在本地存储中访问日志。如果我没记错的话,LocalStorage的限制大约为5MB,如果你不要过多记录日志,这应该已经足够了。你也可以选择性地运行它。
第二种方法 - 仅记录错误
这与Pumbaa80建议的类似。你可以简单地覆盖window.onerror,并仅记录错误信息。
var oldError = window.onerror || function(){};
window.onerror = function(err,url,lineNumber){
oldError.call(this,err,url,lineNumber);
var err ="\n Error: (file: " + url+", error: "+err+", lineNumber: "+lineNumber+")");
localStorage["loggedWinErrors"] += err;
}
第三种激进方法 - 使用虚拟机。
这是最强大的版本,但它提供了最麻烦的用户体验。您在虚拟机中运行信息亭,检测到未捕获的异常时 - 冻结该机器并保存其状态,并运行备份虚拟机。我只在处理最可怕的错误时才需要这样做,而且不太美观。除非您真的想要整个捕获的状态 - 不要这样做。
实际上,在此之前先进行扩展 - 这很繁琐,但可以得到非常可靠的结果。
总之,我认为第一种方法甚至只有第二种方法已经足够满足你的需求了。
localStorage
是一个抽象的存储空间,网页可以在其中保存状态而不会出现安全问题。如果这还不够大,我们可以考虑使用 IndexedDB 方案。
所有这些都取决于你的用例。
window.onerror
并将所有错误保存到 localStorage。 - user123444555621