对我来说,写入文件听起来像是一项乏味的任务。它需要浏览器代码通常没有的权限,并且您必须与必须编写的附加组件协商才能访问文件 I/O。
据我了解你的问题是
我想让 Firefox 记录所有错误
我们可以采取几种方法来解决这个问题
第一种方法 - 也将所有内容记录到 localStorage:
localStorage
现在,您可以写入或改为写入,而不是写入实际文件IndexedDB
。
localStorage["myApplog"] = localStorage["myApplog"] || "";
var oldLog = console.log;
console.log = function(){
oldLog.apply(console,arguments); // use the old console log
var message = "\n "+(new Date).toISOString() + " :: "+
Array.prototype.join.call(arguments," , "); // the arguments
localStorage["myApplog"] += message;
}
这很脏而且很慢,但它应该可以完成工作,您可以稍后在本地存储中访问日志。如果我没记错的话,LocalStorage 有一个 ~5MB 的限制,如果你不疯狂地记录,我认为这已经足够了。您也可以有选择地运行它。
第二种方法 - 仅记录错误
这与 Pumbaa80 的建议类似。您可以简单地覆盖window.onerror
并且只记录错误。
// put an empty string in loggedWinErrors first
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;
}
第三种也是激进的方法 - 使用虚拟机。
这是最强大的版本,但它提供了最有问题的用户体验。您在虚拟机中运行信息亭,您检测到未捕获的异常 - 当您冻结机器并保存其状态时,并运行备份 VM。我只需要在处理最可怕的错误时才这样做,而且它并不漂亮。除非你真的想要整个捕获的状态 - 不要这样做。
真的,在此之前进行扩展 - 这很乏味,但会得到非常可靠的结果。
总之,我认为第一种方法甚至第二种方法都足以满足您的需求。localStorage
是网页用于保存状态而没有安全问题的抽象存储。如果这还不够大,我们可以讨论 IndexedDB 解决方案。
这完全取决于您拥有的用例。